如何在Java 7中使用集合文字?
我试过以下这一行:
Map map={new Character('r'):Color.red,new Character('b'):Color.black};
但Netbeans 7拒绝这一点,错误信息为'{' expected, ';' expected
'{' expected, ';' expected
。
我将Source / Binary格式设置为’JDK 7’,将平台设置为’JDK 1.7’,还有什么我需要做的吗?
Java 7和Java 8都不支持集合文字,正如这个问题所讨论的那样: Project Coin的集合增强是否会在JDK8中进行?
如果您只需要不可变的集合,则可以使用Google的Guava库。 ImmutableList
, ImmutableSet
和ImmutableMap
有几个重载的工厂方法甚至构建器,使创建集合变得容易:
List list = ImmutableList.of(1, 1, 2, 3, 5, 8, 13, 21); Set set = ImmutableSet.of("foo", "bar", "baz", "batman"); Map map = ImmutableMap.of(1, "one", 2, "two", 3, "three");
编辑
Java 9添加了类似于Guava的集合工厂方法 :
List.of(a, b, c); Set.of(d, e, f, g); Map.of(k1, v1, k2, v2) Map.ofEntries( entry(k1, v1), entry(k2, v2), entry(k3, v3), // ... entry(kn, vn) );
您需要定义具体的地图实现,可选择与双括号初始化相结合:
Map map = new HashMap() {{ put(new Character('r'), Color.red); put(new Character('b'), Color.black ); }};
为了扩展Thomas的答案…… Map是一个接口,必须通过一个相关的具体实现(HashMap,TreeMap或LinkedHashMap)进行实例化。 这仍然是很好的做法; 但是,将您的引用变量声明为接口实现而不是具体的具体,因为它提供了未来的灵活性。
但是关于代码片段,我认为你仍然需要在声明的赋值方面定义的键值对。 所以,我会改变:
Map map = new HashMap<>() {{
至
Map map = new HashMap() {{