コンピューティングでは、具体化は型の明示的な表現、つまり実行時の型情報を意味するようになりました。
オラクルのチュートリアルによると、
reifiable 型は、型情報が実行時に完全に利用できる型です。これには、プリミティブ、非ジェネリック型、生の型、バインドされていないワイルドカードの呼び出しが含まれます。
非具現化不可能な型は、コンパイル時に型消去 (無制限のワイルドカードとして定義されていないジェネリック型の呼び出し) によって情報が削除された型です。
次のいずれかの場合、型は具体化可能です。
- プリミティブ型 ( など
int
) //理解- パラメーター化されていないクラスまたはインターフェイスの型 (
Number
、String
、または などRunnable
) // なぜ- すべての型引数が無制限のワイルドカード (
List<?>
、ArrayList<?>
、または などMap<?, ?>
) であるパラメータ化された型 // なぜ- 生の型 (
List
、ArrayList
、または などMap
) // なぜ- コンポーネントの型が具体化可能な配列 (
int[]
、Number[]
、List<?>[]
、List[]
などint[][]
) // なぜ
次のいずれかの場合、型は具体化できません。
- 型変数 ( など
T
) // なぜ- 実際のパラメーター (
List<Number>
、ArrayList<String>
、または などMap<String, Integer>
) を持つパラメーター化された型 // なぜ- バインドされたパラメーター化された型 (
List<? extends Number>
or などComparable<? super String>
) // なぜ
なぜ 2,3,4,5 は具体化可能で、6,7,8 は具体化できないのでしょうか?