在计算中,具体化已经意味着一种类型的显式表示——即运行时类型信息。
甲骨文教程说,
可具体化类型是其类型信息在运行时完全可用的类型。这包括原语、非泛型类型、原始类型和未绑定通配符的调用。
不可具体化类型是在编译时通过类型擦除删除信息的类型——调用未定义为无界通配符的泛型类型。
一个类型是可具体化的,如果它是以下之一:
- 原始类型(例如
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>
orComparable<? super String>
) // 为什么
为什么 2,3,4,5 是可物化的,而 6,7,8 是不可物化的?