擦除丢失了在泛型代码中执行某些操作的能力,任何在运行时需要知道确切类型信息的操作都将无法进行,通过类型标签来对擦除进行补偿。
package com.cognizant.ch15;
class Building {
}
class House extends Building {
}
public class ClassTypeCapture<T> {
Class<T> kind;
public ClassTypeCapture(Class<T> kind) {
this.kind = kind;
}
public boolean f(Object obj) {
return kind.isInstance(obj);
}
public static void main(String[] args) {
ClassTypeCapture<Building> ctt = new ClassTypeCapture<Building>(
Building.class);
System.out.println(ctt.f(new House()));
System.out.println(ctt.f(new Building()));
}
}
output:
true
true