私の知る限り、ジェネリックはコンパイル時にのみ役立ちます。
したがって、次のように宣言できます。
private Set set = new HashSet<String>();
そして、この文字列ハッシュセットで、犬などをそのセットに追加します。実行時に配列のようなチェックがないため (ArrayStoreException...) (ただし、それを使用するとクラスキャストのような問題が発生する可能性があります)設定...
だから私が言いたいのは、私たちは通常、ジェネリックコレクションをそのようにインスタンス化するということです:
Set<String> set = new HashSet<String>();
私の質問は、変数の参照の型だけが本当に重要なので、なぜ HashSet の型を置くのかということです (私は思います)。
つまり、単純に次のように書くことができます。
Set<String> set = new HashSet();
そして、それはまったく同じように機能しますか?では、インスタンス化の際に型を記述するのはなぜでしょうか? (必須ではありません)
編集
型推論のための「ダイヤモンド演算子」については知っていますが、なぜそれが必要なのですか!!! 型推論はすでに機能しているためです。
次のコード:
Set<String> set = new HashSet();
set.add("Test add a string 1");
set.add("Test add a string 2");
for ( String s : set ) {
System.out.println(s);
}
出力を生成します。
文字列を追加するテスト 1 文字列を追加するテスト 2
自分でテストしてください http://ideone.com/vuiCE
では、Java7 の機能としての型推論について話されていますが、それはすでに私にとっては機能しています...
Java7では、私を交換する必要があります
Set<String> set = new HashSet();
に
Set<String> set = new HashSet<>();
まったく同じことをするのに、まだ 2 文字追加ですよね?(ジェネリックがJava7でコンパイル時だけでない限り?わかりません)