La cancellazione dei tipi parametrici – Lezione 26 di Java Avanzato

Il compilatore cancella tutti i tipi parametrici per il bytecode

In Java, i tipi parametrici vengono utilizzati dal compilatore per effettuare i controlli di tipo (type checking) per scoprire eventuali errori già a tempo di compilazione. Quando un programma viene compilato, se non vengono riscontrati errori verrà prodotto il file di bytecode (che verrà eseguito dalla JVM). Il compilatore cancella tutti i parametro di tipo che incontra, per ogni parametro di tipo cancellato trasforma le strutture che lo utilizzavano nelle loro versioni grezze.
I parametri di tipo cancellati vengono sostituiti da Object o dal primo limite superiore se presente (raw type). Di conseguenza, nel bytecode generato non vi sarà traccia dei parametri di tipo.

A causa della cancellazione, in Java non è possibile creare nuovi oggetti utilizzando direttamente il parametro di tipo nell’istruzione new T() non compila perché a runtime la JVM non potrà mai sapere che cosa significa T se è stato cancellato dal compilatore. I generics sono implementati con un meccanismo di riscrittura del codice (raw type e type erasure) da parte del compilatore.
Si può dire che in Java i parametri di tipo rappresentano soltanto un’etichetta per il compilatore dato che non hanno nessun effetto a runtime.
Il risultato di queste scelte progettuali è quello di ottenere delle classi ordinarie, avere un sistema dei tipi più fine consentendo al compilatore di accorgersi di eventuali errori già a tempo di compilazione.

In altri linguaggi l’implementazione dei parametri di tipo è differente, ad esempio in C++ i parametri di tipo vengono istanziati ogni volta che il compilatore li trova. Per questa ragione, in C++ è possibile scrivere senza errori l’istruzione new T().

Indice Lezione PrecedenteLezione Successiva

Pubblicato in Guide, Java, Programmazione Taggato con: , , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*