用Java创build空白地图的最佳方法
我需要创build一个空的地图。
if (fileParameters == null) fileParameters = (HashMap<String, String>) Collections.EMPTY_MAP; 问题是上面的代码会产生这样的警告: types安全性:取消选中从映射到HashMap
什么是最好的方式来创build这个空的地图?
1)如果Map可以是不可变的:
 Collections.emptyMap(); // or, in some cases: Collections.<String, String>emptyMap(); 
当编译器不能自动确定需要什么types的Map(这称为types推断 )时,您将不得不使用后者。 例如,考虑一个像这样声明的方法:
 public void foobar(Map<String, String> map){ ... } 
当直接将空Map传递给它时,必须明确这个types:
 foobar(Collections.emptyMap()); // doesn't compile foobar(Collections.<String, String>emptyMap()); // works fine 
2)如果你需要能够修改地图,那么例如:
 new HashMap<String, String>(); 
(正如tebblanx指出的那样 )
附录 :如果您的项目使用番石榴 ,您有以下select:
1)不可变的地图:
 ImmutableMap.of(); // or: ImmutableMap.<String, String>of(); 
 当然,与Collections.emptyMap()相比,这里没有什么大的好处。  从Javadoc : 
这个映射的行为和执行与
Collections.emptyMap()相当,主要是为了代码的一致性和可维护性。
2)你可以修改的地图:
 Maps.newHashMap(); // or: Maps.<String, String>newHashMap(); 
  Maps包含类似的工厂方法来实例化其他types的地图,如TreeMap或LinkedHashMap 。 
Collections类的emptyMap方法 。
Collections.emptyMap()
如果你需要一个HashMap的实例,最好的方法是:
 fileParameters = new HashMap<String,String>(); 
由于Map是一个接口,如果你想创build一个空的实例,你需要select一些实例化它的类。 HashMap看起来和其他任何东西一样好,所以就使用它。
  Collections.emptyMap() ,或者如果types推断在你的情况下不起作用, 
 Collections.<String, String>emptyMap() 
关于什么 :
Map <String,String> s = Collections.emptyMap();
 由于在许多情况下空映射用于空安全devise,因此可以使用nullToEmpty实用程序方法: 
 class MapUtils { static <K,V> Map<K,V> nullToEmpty(Map<K,V> map) { if (map != null) { return map; } else { return Collections.<K,V>emptyMap(); // or guava ImmutableMap.of() } } } 
类似的设置:
 class SetUtils { static <T> Set<T> nullToEmpty(Set<T> set) { if (set != null) { return set; } else { return Collections.<T>emptySet(); } } } 
并列出:
 class ListUtils { static <T> List<T> nullToEmpty(List<T> list) { if (list != null) { return list; } else { return Collections.<T>emptyList(); } } }