按照上Erasure of Generic Types Java文档,Java泛型类型擦除字节代码
考虑表示在一个单链表一个节点的下列通用类:
public class Node<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; }
// ...
}
因为类型参数Ť Java编译器将其替换为对象:
public class Node {
private Object data;
private Node next;
public Node(Object data, Node next) {
this.data = data;
this.next = next;
}
public Object getData() { return data; }
// ...
}
但与Java 1.7.0_11编译之后,当我与任何反编译器打开它,我可以看到相同的代码一样的源代码。
public class Node<T>
{
private T data;
private Node<T> next;
public Node(T paramT, Node<T> paramNode)
{
this.data = paramT;
this.next = paramNode;
}
public T getData()
{
return this.data;
}
}
如果在编译时应用了Type-Erasure,那么字节代码不能包含如上所示的通用信息。请澄清我。
注:我使用JD-GUI作为一个反编译器来分析字节码
你能不能修复该链接到你的反编译器? – 2015-03-31 18:18:16
知道一个类型是通用的,并且能够知道具体的泛型类型是有区别的。 – 2015-03-31 18:18:45
擦除擦除_objects_的通用类型信息,而不是_types._ – 2015-03-31 20:56:06