问题在于,泛型并不总是出现在java中(我认为他们在1.5中添加了泛型)。因此,为了能够实现向后兼容性,提供了类型擦除功能,该功能可以在编译代码以实现该目标的同时有效地擦除通用类型信息。
摘自官方文件的相关部分:
在类型擦除过程中,Java编译器将擦除所有类型参数,如果类型参数是有界的,则将每个参数替换为其第一个边界;如果类型参数是无界的,则将其替换为对象。
所以这段代码例如
public class Node<T extends Comparable<T>> { private T data; private Node<T> next; public Node(T data, Node<T> next) { this.data = data; this.next = next; } public T getData() { return data; } // ...}在类型擦除后变为:
public class Node { private Comparable data; private Node next; public Node(Comparable data, Node next) { this.data = data; this.next = next; } public Comparable getData() { return data; } // ...}但是,如果您沿着反射的路径前进,就像 光剑
一样,有一种方法可以复活其中一些类型的信息:既强大又危险。



