Согласно документации java на Erasure of Generic Types,
Рассмотрим следующий общий класс, который представляет node в отдельно связанном списке:
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; }
// ...
}
Поскольку параметр типа T не ограничен, компилятор Java заменяет его Object:
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 в качестве декомпилятора для анализа байтового кода