Come per la documentazione Java su Erasure of Generic Types,Java Generics Inserisci Codice di cancellazione byte
Si consideri la seguente classe generica che rappresenta un nodo in una lista concatenata semplice:
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; }
// ...
}
Poiché il parametro tipo T è illimitato, il compilatore Java sostituisce con oggetto:
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; }
// ...
}
Ma dopo la compilazione con Java 1.7.0_11, quando l'ho aperto con qualsiasi decompilatore posso vedere lo stesso codice come il codice sorgente.
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;
}
}
Se Tipo-Erasure applicato in fase di compilazione, il codice byte non deve contenere informazioni generiche come mostrato sopra. Gentilmente, chiariscimi
NOTA: Sto usando JD-GUI come un decompilatore per analizzare il codice di byte
Potrebbe riparare il link al tuo decompilatore? –
C'è una differenza tra conoscere un tipo è generico e poter conoscere il tipo generico concreto. –
La cancellazione cancella le informazioni di tipo generico di _oggetti_, non _types._ –