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