Generics Java: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
FrescoBot (discussione | contributi)
m Bot: niente spazio dopo l'apostrofo e modifiche minori
Riga 2:
 
Il [[Java 5|JDK 1.5]] ha introdotto alcune estensioni al [[Java (linguaggio)|linguaggio Java]]. Una di questa è l'introduzione dei '''generics''' o '''tipi generici'''.
Un generics è uno strumento che permette la definizione di un tipo parametrizzato, che viene esplicitato successivamente in fase di compilazione secondo le necessità; i generics permettono di definire delle [[Astrazione (informatica)|astrazioni]] sui [[Tipo di dato|tipi di dati]] definiti nel linguaggio.
 
 
Riga 79:
 
== Erasure ==
L' '''Erasure''' è il processo che converte il programma codificato con i generici nella forma senza di essi, che rispecchia più da vicino il [[bytecode]] prodotto. Questo termine non è del tutto corretto in quanto vengono si rimossi i generici, ma vengono anche aggiunti i cast.
L'aggiunta di questi cast non è esplicita e il linguaggio di progetto fornisce la '''Cast-iron guarantee''': ossia il cast implicito aggiunto alla compilazione dei generici: non può mai fallire. Questa è una regola che si applica per il codice che non presenta ''unchecked warnings''.
I vantaggi dell'implementazione via '''Erasure''', sono:
Riga 111:
</source>
 
Qui il principio vale fra ''List'' e ''ArrayList'' e fra ''Number'' e ''Integer Double'' in maniera rispettiva.
''List<Integer>'' invece '''non è un sottotipo''' di ''List<Number>'' in quanto viene violato nuovamente '''il principio di sostituzione''', ad esempio:
<source lang="java">
Riga 129:
*tipo '''controvariante''' ''List<super T>'': cattura le proprietà dei ''List<X>'' in cui ''X'' è esteso da ''T''; si usa per specificare tipi che possono essere solo scritti.
*tipo '''bivariante''' ''List<?>'': cattura tutti i ''List<T>'' senza distinzioni; si usa per specificare i tipi che ''non'' consentono né letture né scritture.
 
 
== Definizione di una classe generica ==
Line 169 ⟶ 168:
 
</source>
 
 
==Note==