Java/Generics: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Correggo redirect da Java/Tipi di dati a Java/Tipi di dato tramite popup
Riga 103:
 
== Aspetti avanzati ==
=== Clausole <tt>extends</tt> e <tt>super</tt> ===<br />
È possibile delimitare il tipo che può essere passato come parametro alla classe tramite l'utilizzo di ''extends'' e ''super'' e dell'ereditarietà delle classi. Infatti, poiché i tipi che vengono passati sono delle classi, esse hanno una superclasse e una sottoclasse, attraverso esse è possibile istruire il compilatore affinché accetti classi che rientrino entro il limite superiore o il limite inferiore imposto, tramite ''extends'' o ''super'' rispettivamente. Si considerino ad esempio le seguenti classi:
{{...}}
 
<source lang=java>
class ClassePadre {}
class ClasseFiglio extends ClassePadre{}
class ClasseFiglio2 extends ClasseFiglio{}
</source>
 
Ora, se si dovesse creare una classe generic che, per possibili problemi con il codice scritto al suo interno, debba accettare solo classi che ereditano da una certa classe, ad esempio: da ''ClassePadre'', la classe Generic dovrà avere questo aspetto:
 
<source lang=java>
class ClasseGeneric<T extends ClasseFiglio>{
[...]
}
</source>
 
in questo modo ogni tentativo di passare una classe che non erediti da ClasseFiglio, come ClassePadre, non farà compilare.<br />
Mentre se si vuole che una classe Generic accetti tutte le classi superclassi di una classe, la classe Generic dovrà delimitare con ''super'' e, prendendo d'esempio le classi prima presentate, avrà il seguente aspetto:
 
<source lang=java>
class ClasseGeneric<T super ClasseFiglio>{
[...]
}
</source>
 
in questo modo ogni tentativo di passare alla classe generic una sottoclasse della classe ClasseFiglio, come ClasseFiglio2, non farà compilare.
 
=== Clausola <tt>&</tt> ===