Тип Generics Java Erasure байт-код
Согласно документации 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; }
// ...
}
Потому что параметр типаT неограничен, компилятор 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 в качестве декомпилятора для анализа байт-кода