使用<>创建一个匿名类的地图

时间:2013-02-14 15:53:52

标签: java java-7 diamond-operator

在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>() {{....才能编译代码。

为什么会这样?如果我只创建一个新实例,为什么我可以创建一个地图并使用菱形,但如果我通过匿名类创建一个地图,代码就不会编译?

1 个答案:

答案 0 :(得分:4)

这只是猜测,但是当你做

new HashMap<>() {{
    put("something", "something");
}};

它实际上创建了一个HashMap的子类我不喜欢这个,因为你用一堆子类弄乱了你的类。我猜测在这种情况下,Java无法推断出通用钻石类型是什么,因为它正在被子类化。