如何在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库。 ImmutableListImmutableSetImmutableMap有几个重载的工厂方法甚至构建器,使创建集合变得容易:

 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() {{