1. ホーム
  2. java

[解決済み] Javaにおけるジェネリックの消去の概念とは?

2022-07-03 04:08:29

質問

Javaにおけるジェネリクスの消去とはどのような概念ですか?

どのように解決するのですか?

基本的にはコンパイラのトリックによってJavaでジェネリックが実装される方法です。コンパイルされたジェネリックコードは は実際に を使うだけです。 java.lang.Object について話すとき、どこででも T (または他の型パラメータ) について話すところならどこでも - そして、それが本当に一般的な型であることをコンパイラに伝えるためのいくつかのメタデータがあるところでもです。

汎用型やメソッドに対してコードをコンパイルするとき、コンパイラはあなたが本当に言いたいこと(すなわち T の型引数が何であるか)、そして コンパイル で検証しますが、生成されたコードはまたもや java.lang.Object - という言葉で語られるだけで、コンパイラは必要に応じて余分なキャストを生成します。実行時に List<String>List<Date> は全く同じです。余分な型情報は 消された をコンパイラで消去しています。

これを例えばC#と比較すると、実行時に情報が保持されるため、コードに次のような式を含めることができます。 typeof(T) と等価である T.class - と同じですが、後者が無効であることを除きます。(.NETジェネリックとJavaジェネリックの間にはさらに違いがあります。) 型の消去は、Javaジェネリックスを扱うときの多くのquot;odd"警告/エラー メッセージの原因となっています。

他のリソース。