在 Java 中创建空地图的最佳方式

新手上路,请多包涵

我需要创建一个空地图。

 if (fileParameters == null)
    fileParameters = (HashMap<String, String>) Collections.EMPTY_MAP;

问题是上面的代码产生了这个警告: Type safety: Unchecked cast from Map to HashMap

创建此空地图的最佳方法是什么?

原文由 JorgeO 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 552
2 个回答

1) 如果 Map 可以是不可变的:

 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) 如果你需要能够修改Map,那么例如:

 new HashMap<String, String>()

(正如 tehblanx 指出的那样


附录:如果您的项目使用 Guava ,您有以下选择:

1) 不可变地图:

 ImmutableMap.of()
// or:
ImmutableMap.<String, String>of()

当然,与 Collections.emptyMap() 相比,这里没有什么大的好处。 从 Javadoc

此映射的行为和性能与 Collections.emptyMap() 相当,主要是为了代码的一致性和可维护性。

2) 您可以修改的地图:

 Maps.newHashMap()
// or:
Maps.<String, String>newHashMap()

Maps 包含用于实例化其他类型地图的类似工厂方法,例如 TreeMapLinkedHashMap


更新(2018 年) :在 Java 9 或更新版本上,创建不可变空映射的最短代码是:

 Map.of()

…使用 JEP 269 中的新 便利工厂方法。 😎

原文由 Jonik 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题