5

AngelikaLangerDocを読んでいます。ほぼ三日ぶりに読んでいます。前のレッスンで、 の配列をunbounded wild card作成できることを学びました。また、無制限のワイルドカード パラメータ化された型が と呼ばれることも調べReifiable typesました。再定義可能な型の定義を検索したところ、実行時に型情報がわかっている型が呼び出されると記載されていreifiable typeます。記事からコード スニペットを選択します。

Pair<?,?>[] iniPair = new Pair<?,?>[10];

私は次の混乱を念頭に置いています。

  1. 無制限のワイルドカード パラメーター化された型が reifiable と呼ばれるのはなぜですか?
  2. 上記の例では、型情報はどのようにわかりますか?

私はそれが基本的な質問であることを知っています。ジェネリックの軌道に戻るために、復習を取り戻そうとしています。誰でもこの問題について詳しく説明できますか?

4

2 に答える 2

5

そのウェブサイトから:

Java で具体化可能な型は、具体化しても違いが生じない型、つまり、型引数の実行時表現を必要としない型のみです。

ワイルドカード パラメータには型情報がないため、消去によって失われるものはありません。

于 2013-08-23T20:39:51.020 に答える
4

Java コンパイラーは、すべての無制限の型パラメーターを に置き換えているためObjectです。型消去
による

ジェネリックスを実装するために、Java コンパイラは型消去を以下に適用します。

1.ジェネリック型のすべての型パラメーターをそれらの境界またはオブジェクト (型パラメーターが無制限の場合) に置き換えます。したがって、生成されたバイトコードには、通常のクラス、インターフェース、およびメソッドのみが含まれます。

2.型の安全性を維持するために、必要に応じて型キャストを挿入します。

3.拡張されたジェネリック型でポリモーフィズムを保持するブリッジ メソッドを生成します。

Javadocによる Reifiable という用語

reifiable 型は、型情報が実行時に完全に利用できる型です。これには、プリミティブ、非ジェネリック型、生の型、バインドされていないワイルドカードの呼び出しが含まれます。

于 2013-08-23T20:47:20.067 に答える