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)
Riga 1:
{{Titolo errato|Java/Generics}}
 
{{java/Seconda parte}}
{{Indice destro}}
 
== Type variables ==
Può risultare molto utile (in alcuni casi necessario) che una stessa entità di programma sia scritta per lavorare con tipi distinti e '''non''' legati tra loro da vincoli di ereditarietà. L'esempio classico è quello di una classe che implementa una collezione, e il cui codice deve poter lavorare nello stesso identico modo con tipi completamente diversi e che non sono noti a priori.
Line 8 ⟶ 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 delle specifiche di linguaggio.<ref group="A">[http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#108850 The Java Language Specification, Chapter 4]</ref>
 
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.
Line 30 ⟶ 28:
</source>
 
In questo caso, <tt>Collezione</tt> è un tipo generico, ed <tt>E</tt> è il nome dell'unico ''type parameter''. La scrittura <tt>Collezione</tt> è chiamata ''raw type''; la scrittura <tt>Collezione&lt;java.lang.String></tt> identifica una ''collezione di stringhe'' e si chiama ''parametrized type''.<ref group="A">[http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#110257 Raw Types]</ref><ref group="A">[http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.5 Parametrized Types]</ref>
 
=== Istanziazione ===
Line 128 ⟶ 126:
 
{{...}}
 
== Approfondimenti ==
; Materiale presente sul sito della Oracle
*Si consiglia di leggere il [http://download.oracle.com/javase/tutorial/extra/generics/index.html tutorial sui generics] presente sul sito della Oracle (di cui è disponibile anche una [http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf versione in formato PDF]).
*[http://download.oracle.com/javase/7/docs/technotes/guides/language/generics.html Generic Programming In Java], 2004 Sun Microsystems, Inc.
 
; Materiale di terze parti
*Angelika Langer, [http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html Java Generics FAQs]
 
== La programmazione generica in informatica ==
Line 153 ⟶ 143:
<references group="A"/>
 
== Bibliografia ==
; Specifiche
*[http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html Capitolo 4] delle specifiche 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
*Si consiglia di leggere il [http://download.oracle.com/javase/tutorial/extra/generics/index.html tutorial sui generics] presente sul sito della Oracle (di cui è disponibile anche una [http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf versione in formato PDF]).
*[http://download.oracle.com/javase/7/docs/technotes/guides/language/generics.html Generic Programming In Java], 2004, Sun Microsystems, Inc.
 
; Materiale di terze parti
*Angelika Langer, [http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html Java Generics FAQs]
 
[[categoria:Java|Generics]]