Tipi generici
Un tipo generico (generic type) è una classe o un'interfaccia parametrizzata rispetto ai tipi. Vediamo un esempio con una classe Box
.
Una semplice classe Box
:
Formato per definire una classe generica:
Le sezione dei type parameters, delimitata da <>, segue il nome della classe. Essa specifica i type parameters (anche detti type variables) T1, T2, .....Tn.
La generic class declaration di Box
diventa:
Come si può vedere, tutte le occorrenze di Object sono sostituite da T . Un tipo variabile può essere qualsiasi tipo non primitivo: qualsiasi tipo classe, tipo interface, tipo array, o anche un altro tipo parametrico.
Per riferirsi a un generic Box nel codice, bisogna eseguire una generic type invocation, che sostituisce il tipo generico T con il tipo concreto, ad esempio Integer:
Un altro esempio, di definizione di tipo parametrico:
Ora l'istanziazione del tipo parametrico:
Si può sostituire al parametro di un tipo parametrico (es: T ) con un altro tipo parametrizzato ad esempio List<Integer>
, ad esempio:
Generic methods
Generic methods sono metodi che introducono anche loro tipo parametrici. Sono simili alla dichiarazionedi un tipo parametrico, ma lo scope del tipo parametrico è limitata al metodo dove è dichiarato. Sono parmessi metodi parametrici, di tipo statico e non statico, così come costruttori generici.
La sintassi per un metodo generico include la lista det tipi parametrici prima del tipo di ritorno del metodo.
La classe Util
contiene un metodo parametrico compare
tra due Pair
object:
Per invocare il metodo:
Il tipo è stato provvisto esplicitamente (<Integer, String>). Generalment si può anche evitare, il compilatore riesce a inferire i tipi cge sono necessari:
Last updated