official Javaジェネリックのチュートリアル は、型の消去と、コンパイラに追加された理由を説明します。
ジェネリック型がインスタンス化されると、コンパイラーは型消去と呼ばれる手法によってこれらの型を変換します。これは、コンパイラーがクラスまたはメソッド内の型パラメーターと型引数に関連するすべての情報を削除するプロセスです。型消去により、Javaジェネリックを使用するアプリケーションは、Javaジェネリックの前に作成されたライブラリおよびアプリケーションとのバイナリ互換性を維持します。
これはおそらく実用的なアプローチであるか、おそらく最も痛みの少ないアプローチでした。しかし、ジェネリックが業界全体で広くサポートされている今、型消去を必要としないようにするために何ができるでしょうか?下位互換性を壊す必要がなくても実現可能ですか、それとも実現可能な場合は実用的ですか?
上記の引用の最後のステートメントは自己参照になりますか?つまり、「タイプ消去によりJavaジェネリックを使用してJavaライブラリとアプリケーションでJavaタイプの消去を実行するバージョン。」
サポート終了は、Java開発ツールキットおよびJavaランタイム環境に適用されます。また、Oracle(Sun)バージョンにのみ適用されます。ただし、サードパーティによって作成されたアプリケーション。JVMで実行されたコードを決して壊さないことが意図されているため、Javaが型の消去を停止することはほとんどありません。
もちろん、C#は後のバージョンで型の消去を行わずに下位互換性のあるジェネリックを導入しましたが、基本的にはすべてのコレクションクラスを複製することを意味していました。私が思うのはJava=デザイナーがしたくないので、そもそもなぜ型消去を選んだのでしょうか。値型がないと、型消去されていないジェネリックの利点はそれほど大きくありません。 。