我试过以下行:
Map<Character, Color> map={new Character('r'):Color.red,new Character('b'):Color.black};
但是 Netbeans 7 拒绝了这一点,并带有错误消息'{' expected, ';' expected
。
我已将 Source/Binary 格式设置为“JDK 7”,平台设置为“JDK 1.7”,还有什么需要做的吗?
我试过以下行:
Map<Character, Color> map={new Character('r'):Color.red,new Character('b'):Color.black};
但是 Netbeans 7 拒绝了这一点,并带有错误消息'{' expected, ';' expected
。
我已将 Source/Binary 格式设置为“JDK 7”,平台设置为“JDK 1.7”,还有什么需要做的吗?
Java 7 和 Java 8 都不支持集合文字,如以下问题所述:Are Project Coin's collection enhancements going to be in JDK8?
如果您只需要不可变集合,则可以使用 Google 的Guava库。ImmutableList
,ImmutableSet
并且ImmutableMap
有几个重载的工厂方法甚至是使创建集合变得容易的构建器:
List<Integer> list = ImmutableList.of(1, 1, 2, 3, 5, 8, 13, 21);
Set<String> set = ImmutableSet.of("foo", "bar", "baz", "batman");
Map<Integer, String> 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<Character, Color> map = new HashMap<Character, Color>() {{
put(new Character('r'), Color.red);
put(new Character('b'), Color.black );
}};
为了扩展 Thomas 的答案... Map 是一个接口,必须通过相关的具体实现(HashMap、TreeMap 或 LinkedHashMap)之一进行实例化。这仍然是一种很好的做法;但是,将您的引用变量声明为接口实现而不是具体的具体实现,因为它提供了未来的灵活性。
不过,关于代码片段,我认为您仍然需要在声明的赋值端定义的键值对。所以,我会改变:
Map<Character, Color> map = new HashMap<>() {{
到
Map<Character, Color> map = new HashMap<Character, Color>() {{