0

ジェネリックスを取り巻く型消去については理解していますが、このコードでエラーが発生しないことに驚きました。

public class MyClass {
  private final HashMap<ClassA,ClassB> hashMap;

  public MyClass() {
    this.hashMap = new HashMap<>();
  }
}

ほとんどの場合、私はJava1.6でEclipseのJavaStandardバージョンを使用しており、自動補完されたコンストラクター名を選択すると、ジェネリック型が自動入力されます。現在、EclipseとJava 1.7のJ2EEバージョンを使用していますが、使用していません。コードがコンパイルされ、問題ありません。完全に冗長な情報なので、なぜ必要なのかわかりません。しかし、あなたがそれを置く必要がないのはただ間違っていると感じます。

なぜこれが必要ないのですか、それとも私はここで何かを完全に見逃していますか?

4

1 に答える 1

4

実際、と入力<>すると、「コンパイラー、私のために作業を行い、宣言に記載されているジェネリックスを入力してください」と言います。

これはダイアモンド演算子と呼ばれ、Java 7の新機能です。たとえば、SOのこの質問または公式チュートリアルを参照してください。

代わりに書いた場合this.hashMap = new HashMap();、コンパイラは文句を言うはずです(そして一般的に警告を投げます)。

于 2012-05-18T01:08:15.257 に答える