Java/Generics: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m - {{titolo errato}}, sposto note in biblio, + indice destro (ora il tmpl sommario è orizzontale invece che verticale)
m specifiche ===> specifica
Riga 6:
Un modo semplice per ottenere ciò è scrivere del codice che lavori con la classe <tt>java.lang.Object</tt>, dato che essa è a capo della gerarchia di tutti i tipi riferimento. Lo svantaggio principale è che i ''client'' devono servirsi di un cast ogni volta, e ciò non solo allunga il codice, ma aumenta il rischio di bachi (ClassCastExceptions non desiderate) nel caso di errori di battitura nella scrittura dell'operatore di cast.
 
Il linguaggio fornisce una alternativa, che consiste nell'uso di una ''type variable'', ovvero un identificatore che rappresenta un tipo che non è noto a priori. Le ''type variables'' sono definite nel capitolo 4 delledella specifichespecifica di linguaggio.
 
L'idea di fondo è che il codice generico definisca nell'interfaccia uno o più ''type parameters'', i quali assumono il ruolo di ''type variables'' nell'implementazione, comportandosi esattamente come tipi riferimento noti. Il ''client'' passa come parametro i tipi esatti da utilizzare.
Riga 93:
*essere veramente brevi (un solo carattere, se possibile)
*indicare simbolicamente il ruolo svolto dal type parameter.
Queste convenzioni permettono di distinguere a colpo d'occhio una ''type variable'' da un tipo noto.<ref group="A">[http://java.sun.com/docs/books/jls/third_edition/html/names.html#6.8.3 Capitolo 6] delledella specifichespecifica di linguaggio.</ref>
 
== Utilizzo delle type variables ==
Riga 118:
Il compilatore elimina i generics dal codice sorgente, e inserisce automaticamente 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 il codice eseguito dalla macchina virtuale '''non''' usa le informazioni sui generics.
 
Ciò è stato necessario per introdurre i ''generics'' nel linguaggio, senza che ciò richiedesse l'aggiornamento delle specifichedella specifica 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.
Riga 145:
== Bibliografia ==
; Specifiche
*[http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html Capitolo 4] delledella specifichespecifica di linguaggio, con particolare riferimento alla [http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#108850 sezione 4.4], ''Type variables'', alla [http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#110257 sezione 4.8], ''Raw Types'', e alla [http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.5 sezione 4.5], ''Parametrized Types''.
 
; Materiale presente sul sito della Oracle