Type erasure

Elaborazione delle pagie relative a Type Erasure e Generics di wikipedia EN

Nei linguaggi di programmazione la Type Erasure (cancellazione di tipo) si riferisce al processo, eseguito a tempo di compilazione, tramite il quale tramite il quale le informazione sul tipo vengono rimosse da un programma prima che questo venga eseguito (a run-time) . In java quindi i Generics sono implementati tramite la Type Erasure, la correttezza sui tipi è effettuata a tempo di compilazione; l'informazione sui tipi dei generics viene appunto rimossa a tempo di compilazione.

Ad esempio, List<Integer> verrà convertita nella versione non generica, che normalmente può contenere oggetti di qualsiasi tipo; i controlli a tempo di compilazione servono quindi a garantire la correttezza di tipo.

Uno degli effetti collaterali della Type Erasure è che il parametro di tipo non può essere determinato a Runtime, ad esempio se un ArrayList viene esaminato a Runtime non esiste in genere un modo per determinare se prima della Type Erasure l'array fosse un ArrayList<Integer> oppure un ArrayList<Float>.

Esempio

ArrayList<Integer> li = new ArrayList<Integer>();
ArrayList<Float> lf = new ArrayList<Float>();
if (li.getClass() == lf.getClass()) // viene valutato true
  System.out.println("Sono uguali");

Links