image.png
image.png

利用反射获取类型参数, 但是没有返回有用的信息:

image.png

Java 泛型是使用擦除来实现的, 任何具体类型信息都被擦除:

  • List 和 List 在运行时事实上是相同类型
  • 这两种形式都被擦除成原生的 List 类型

15.7.1 C++ 的方式

由编译器检查:

image.png

java 中不能使用该方式:

image.png

给 java 编译器一个类型边界:

image.png

这种方式不如自己写一个包含关系:

image.png

15.7.2 迁移兼容性

具体化:

image.png

擦除的核心动机是它使得泛化的客户端可以用非泛化的类库来使用, 反之亦然, 这经常被称为迁移兼容性.

15.7.3 擦除的问题

泛型不能用于显示地引用运行时类型的操作之中, 转型, instanceof, new.

  • d2.set(obj) 时编译器才给出警告
  • 使用 @SuppressWarnings(unchecked") 来抑制警告

image.png
image.png

15.7.4 边界处的动作

Array.newInstance()