我已经尝试了下面这行代码:
Map<Character, Color> map={new Character('r'):Color.red,new Character('b'):Color.black};
但是Netbeans 7拒绝了此操作,并显示错误信息'{' expected, ';' expected
。
我已将源/二进制格式设置为“JDK 7”,平台设置为“JDK 1.7”,是否还需要做其他事情?
我已经尝试了下面这行代码:
Map<Character, Color> map={new Character('r'):Color.red,new Character('b'):Color.black};
但是Netbeans 7拒绝了此操作,并显示错误信息'{' expected, ';' expected
。
我已将源/二进制格式设置为“JDK 7”,平台设置为“JDK 1.7”,是否还需要做其他事情?
正如在这个问题中所讨论的那样:《项目硬币》中的集合增强功能是否会出现在JDK8中?,Java 7和Java 8都不支持集合字面值。
如果您只需要不可变集合,可以使用谷歌的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 );
}};
Character
(手动装箱)或使用自动装箱并不是降低评分的原因。这只是一种风格问题,我尽可能使用OP的代码,以避免混淆。 - ThomasMap<Character, Color> map = new HashMap<>() {{
到
Map<Character, Color> map = new HashMap<Character, Color>() {{