在JDK 1.7中,我可以创建Collection
个例如像这样说HashMap
:
private HashMap<String, String> map = new HashMap<>();
最后使用菱形<>
。
但如果我要创建这样的地图:
private static final HashMap<String, String> MAP = new HashMap<>() {{
put("something", "something");
}};
钻石编译器说:
Cannot use ''<>'' with anonymous inner classes
我必须使用:... new HashMap<String, String>() {{....
才能编译代码。
为什么会这样?如果我只创建一个新实例,为什么我可以创建一个地图并使用菱形,但如果我通过匿名类创建一个地图,代码就不会编译?
答案 0 :(得分:4)
这只是猜测,但是当你做
时new HashMap<>() {{
put("something", "something");
}};
它实际上创建了一个HashMap
的子类我不喜欢这个,因为你用一堆子类弄乱了你的类。我猜测在这种情况下,Java无法推断出通用钻石类型是什么,因为它正在被子类化。