消去とは何ですか?
- Erasure は、Java がジェネリックスを実装するために使用する手法であり、以前のバージョンの言語との下位互換性を保証します。
- コンパイル中に、すべてのジェネリック型情報は *削除 *(または「消去」)されます。
2. Erasure を使用する動機
従来のコードとの互換性:
- Java (JDK 5) でのジェネリックスの導入により、古いコードが無効になるべきではありません。
- ジェネリックの設計は、ジェネリック コードと非ジェネリック コードの両方がスムーズに連携するようにするために必要でした。
適切な強制:
- コンパイラは、指定された引数との型互換性を確保するために強制を追加します。
- ジェネリック型からの情報の削除:
- 型パラメータはソース コード内にのみ存在し、実行時には存在しません。
4.消去動作の例
class Gen<T> {
T ob;
Gen(T o) {
ob = o;
}
T getOb() {
return ob;
}
}
ログイン後にコピー
class Gen {
Object ob;
Gen(Object o) {
ob = o;
}
Object getOb() {
return ob;
}
}
ログイン後にコピー
メモ:
- type パラメータは Object に置き換えられます。
- 生成されたコードには一般的な情報はありません。
5.消去の制限事項
実行時に型情報が欠落しています:
- ジェネリック型はソース コードのメカニズムであり、コンパイル後には存在しません。
不可能:
- 実行時にインスタンスのジェネリック型を取得します。
- ジェネリック型のインスタンスを直接作成する (例: new T() は許可されません)。
6.実用的な影響
消去の説明:
- ジェネリックにオーバーロードがない理由: ジェネリック型のみが異なるシグネチャを持つメソッドは許可されません。
- ジェネリックでプリミティブ型を直接使用できないのはなぜですか (例: Gen は無効です。Gen を使用する必要があります)。
コンパイル時のセキュリティ:
- 型情報は消去されますが、コンパイラはコンパイル中に型の互換性をチェックします。
7.結論
- 消去を使用すると、下位互換性を損なうことなくジェネリックスを Java に追加できました。
- いくつかの制限にもかかわらず、ジェネリクスはコンパイル時に型安全性を提供し、生成されたコードは以前のバージョンの JVM との互換性を維持します。
以上が消去の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。