4

重複の可能性:
ダイヤモンド演算子を使用した二重ブレースの初期化 (匿名の内部クラス)

Java 7 を使用すると、なぜ次のような問題が発生するのですか

final List<String> a = new ArrayList<>() {
    {
        add("word");
    }
};

のように明示的な型宣言が必要です。

final List<String> a = new ArrayList<String>() {
    {
        add("word");
    }
};
4

1 に答える 1

4

私見、一般に、Java は型推論を回避します。

いずれにせよ、<>コンパイラがどのジェネリック型が使用されたかを知る必要がない場合にのみ機能します。匿名クラスの場合、コンパイラは型を推測しないため、実際の型を指定する必要があります。

型推論を提供するのではなく、型チェックを効果的<>にオフにします。匿名クラスは実際のジェネリック型を格納するため、それを提供する必要があります。

List<String> a = new ArrayList<>()

むしろ似ている

@SuppressWarnings("unchecked")
List<String> a = new ArrayList()

ただし、匿名サブクラスの場合、コンパイラはジェネリック型を指定する必要があります。

于 2012-10-12T15:44:24.043 に答える