考虑这段代码:
Set<String> mySet = new HashSet<String>(){{add("foo");add("boo");}};
或者对于 HashMap
:
Map<String,String> myMap = new HashMap<String,String>(){{put("foo","bar");put("boo","jar");}};
优点很简单:代码行数少,简洁。但是有什么缺点呢?
UPD:问题不仅涉及集合,还涉及所有类型的集合,添加了 Map
来说明这一点。
最佳答案
当您这样做时,您正在创建 HashSet 的匿名子类,这意味着您不必要地用不执行任何新操作的类污染了您的代码库。
这个怎么样?
Set<String> set = new HashSet<String>(Arrays.asList("foo", "bar"));
或者,使用 Guava的 Sets
类(class)。它有工厂方法来初始化不同种类的集合:
Set<String> set = Sets.newHashSet("foo", "bar");
使用 map 会比较棘手,但您可以使用 ImmutableMap
:
Map<String,String> myMap =
ImmutableMap.of("foo","bar","boo","jar");
或(可变版本)
Map<String,String> myMutableMap =
Maps.newHashMap(ImmutableMap.of("foo","bar","boo","jar"));
没有外部库,您仍然可以使用单个条目初始化 Map:
Map<String,String> myMap = new HashMap<String, String>(
Collections.singleTonMap("foo","bar")
);
但如果你问我,那是一只丑陋的野兽。
UPD: The question is not only about sets, but about all types of collections, added Map to illustrate this.
Guava 有几个这样的工厂类:
关于java - 在 Java 中使用就地集合初始化器的缺点是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6665049/