List<String> list = new ArrayList();
コンパイラの警告が発生します。
ただし、次の例は警告なしでコンパイルされます。List<String> list = new ArrayList<>();
なぜダイヤモンド演算子の導入が必要なのか、興味があります。型引数が存在しない場合、コンストラクターで型推論を行わないのはなぜですか (Java の静的メソッドに対して既に行われ、Google guava などのコレクション ライブラリによって悪用されているため)。
編集:ミリムースの回答を出発点として使用して、実際に型消去が何であるかを調べましたが、すべての型情報を削除するだけではありません。コンパイラは実際にはもう少し多くのことを行います(公式ドキュメントからコピー):
- ジェネリック型のすべての型パラメーターをそれらの境界またはオブジェクト (型パラメーターが無制限の場合) に置き換えます。したがって、生成されたバイトコードには、通常のクラス、インターフェース、およびメソッドのみが含まれます。
- 型の安全性を維持するために、必要に応じて型キャストを挿入します。
- 拡張されたジェネリック型でポリモーフィズムを保持するブリッジ メソッドを生成します。