在 Java 中创建空映射的最佳方法
2022-08-31 07:49:21
我需要创建一个空地图。
if (fileParameters == null)
fileParameters = (HashMap<String, String>) Collections.EMPTY_MAP;
问题是上面的代码产生以下警告:类型安全:未选中的从Map到HashMap的强制转换
创建此空地图的最佳方法是什么?
我需要创建一个空地图。
if (fileParameters == null)
fileParameters = (HashMap<String, String>) Collections.EMPTY_MAP;
问题是上面的代码产生以下警告:类型安全:未选中的从Map到HashMap的强制转换
创建此空地图的最佳方法是什么?
1) 如果映射可以不可变:
Collections.emptyMap()
// or, in some cases:
Collections.<String, String>emptyMap()
当编译器无法自动确定需要哪种Map时,有时必须使用后者(这称为类型推断)。例如,考虑一个声明如下的方法:
public void foobar(Map<String, String> map){ ... }
将空 Map 直接传递给它时,必须显式说明类型:
foobar(Collections.emptyMap()); // doesn't compile
foobar(Collections.<String, String>emptyMap()); // works fine
2)如果您需要能够修改地图,那么例如:
new HashMap<String, String>()
(正如tehblanx所指出的)
附录:如果您的项目使用番石榴,您有以下选择:
1) 不可变映射:
ImmutableMap.of()
// or:
ImmutableMap.<String, String>of()
当然,与 相比,这里没有太大的好处。来自 Javadoc:Collections.emptyMap()
此映射的行为和执行与 相比,主要是为了代码的一致性和可维护性。
Collections.emptyMap()
2)您可以修改的地图:
Maps.newHashMap()
// or:
Maps.<String, String>newHashMap()
Maps
还包含用于实例化其他类型的地图的类似工厂方法,例如TreeMap
或LinkedHashMap
。
更新(2018 年):在 Java 9 或更高版本上,用于创建不可变空映射的最短代码为:
Map.of()