Sobes.tech
Middle+

Cos'è la cancellazione dei tipi in Java?

sobes.tech AI

Risposta dell'AI

L'eliminazione dei tipi (type erasure) è un processo in Java in cui le informazioni sui tipi vengono eliminate durante la compilazione, e il bytecode compilato non contiene informazioni sui parametri generici.

Punti chiave:

  • Compatibilità: Permette ai generici di funzionare con codice più vecchio che non utilizza generici.
  • Implementazione: Il compilatore sostituisce i tipi parametrizzati con la loro limite superiore (di solito Object) e inserisce le conversioni di tipo necessarie.
  • Limitazioni:
    • Non è possibile usare tipi primitivi come parametri generici (ad esempio, List<int>).
    • Non è possibile creare un array di un tipo parametrizzato (ad esempio, new List<String>[10]).
    • Non si può usare l'operatore instanceof per verificare un tipo parametrizzato (ad esempio, if (list instanceof List<String>)).
    • Non si possono sovraccaricare metodi per tipi parametrizzati se le loro firme eliminate sono uguali.

Esempio:

// Codice sorgente con generici
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // Non richiede cast esplicito

// Bytecode dopo l'eliminazione dei tipi
List list = new ArrayList(); // Tipo List<String> sostituito da List
list.add("hello");
String s = (String)list.get(0); // Cast implicito inserito

Nonostante le limitazioni, l'eliminazione dei tipi è un aspetto chiave nell'implementazione dei generici in Java, garantendo la compatibilità retroattiva.