为什么以下类型在java中是reifiable和non-reifiable的?
在计算中,重新化已经意味着某种类型的显式表示形式,即运行时类型信息。
预言机教程说,
可重用类型是其类型信息在运行时完全可用的类型。这包括基元、非泛型类型、原始类型和未绑定通配符的调用。
不可重用类型是在编译时通过类型擦除(未定义为无界通配符的泛型类型的调用)删除信息的类型。
如果某个类型是下列类型之一,则该类型是可重用的:
- 基元类型(如) //理解
int
- 非参数化类或接口类型(如 、 、 或 ) // 为什么
Number
String
Runnable
- 一种参数化类型,其中所有类型参数都是无界通配符(如 、 、 或 ) // why
List<?>
ArrayList<?>
Map<?, ?>
- 原始类型(如 、 、 或 ) // 为什么
List
ArrayList
Map
- 组件类型可重用的数组(如 、、、或) // why
int[]
Number[]
List<?>[]
List[]
int[][]
如果某个类型是下列类型之一,则该类型不可重试:
- 类型变量(如) // why
T
- 具有实际参数(如 、 、 或 ) 的参数化类型 // why
List<Number>
ArrayList<String>
Map<String, Integer>
- 具有绑定(如 or)的参数化类型 // why
List<? extends Number>
Comparable<? super String>
为什么 2,3,4,5 是可再生的,而 6,7,8 是不可重现的?