消去

Linda Hamilton
リリース: 2024-12-30 15:15:10
オリジナル
671 人が閲覧しました

Erasure (Apagamento de Tipos)

消去とは何ですか?
- 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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート