[解決済み] 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"警告/エラー メッセージの原因となっています。
他のリソース。
- Oracle ドキュメント
- ウィキペディア
- Gilad Bracha の Java ジェネリックスガイド (PDF - 強くお勧めします。リンクは定期的に変更する必要があります。)
- Angelika Langer の Java Generics FAQ。
関連
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
Javaクラスローダーにソースコードから潜り込む
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラーが報告されました。リソースの読み込みに失敗しました:サーバーは500(内部サーバーエラー)のステータスで応答しました。
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
javaの模造品QQ WeChatのチャットルーム
-
Methodのinvokeメソッド実装のJavaリフレクション
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
[解決済み] List<Dog> は List<Animal> のサブクラスですか?Java のジェネリックはなぜ暗黙のうちに多相性にならないのですか?