7

JDK 1.7Collectionでは、たとえば次の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>() {{....コードをコンパイルするには、次を使用する必要があります。

なんでそうなの?新しいインスタンスを作成しているだけでマップを作成してdiamondを使用できるのに、匿名クラスを介してマップを作成しているとコードがコンパイルされないのはなぜですか?

4

1 に答える 1

4

これは単なる推測ですが、

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

たくさんのサブクラスでクラスを汚してしまうので、実際にはHashMap私はこれが好きではないというサブクラスを作成します。この場合、Javaはサブクラス化されているため、一般的なダイアモンドタイプが何であるかを推測できないと思います。

于 2013-02-14T15:56:14.603 に答える