7

在 JDK 1.7 中,我可以创建一个Collectionlet,例如这样说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>() {{....才能编译代码。

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

4

1 回答 1

4

这只是一个猜测,但当你这样做时

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

它实际上创建了一个HashMapI don't like this 的子类,因为你用一堆子类弄脏了你的类。我猜在这种情况下,Java 无法推断出通用菱形类型是什么,因为它正在被子类化。

于 2013-02-14T15:56:14.603 回答