按照上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