Java/Generics: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
Riga 115:
{{...}}
 
== DifferenzeHeap con il C++pollution ==
{{...}}
 
== Implementazione ==
Il compilatore elimina i generics dal codice sorgente, e inserisce automticamente i ''cast'' necessari per simulare questa funzionalità. Il ''bytecode'' contiene informazioni sotto forma di metadati che identificano i tipi e i metodi generici, ma il codice eseguibile dei metodi ''non'' contiene queste informazioni: il risultato è che, a tempo di esecuzione, la macchina virtuale '''non''' usa le informazioni sui generics.
 
Ciò è stato necessario per introdurre i ''generics'' nel linguaggio, senza che ciò richiedesse l'aggiornamento delle specifiche della macchina virtuale. Il codice post-1.5 può essere eseguito anche su macchine virtuali che aderiscono alla seconda edizione della JVMS.
 
Tuttavia, ciò ha uno svantaggio importante: i generics non possono essere usati dove è necessario conoscere quale sia il tipo effettivo assegnato a ''run-time'', ed è questo il motivo principale per cui il linguaggio impone delle [[#Utilizzo_delle_type_variables|restrizioni sull'uso]] delle type variables.
 
=== Differenze con il C++ ===
In C++, un ''template'' è una classe o una funzione che definisce uno o più parametri di tipo, ed è l'analogo della classe generica o del metodo generico in Java; tuttavia, il meccanismo di implementazione è completamente diverso: in C++, il codice sorgente della funzione o della classe viene '''copiato''' ogni volta che un ''client'' lo richiama con un tipo ben preciso.
 
{{...}}