18. Generici
In Java i generici consentono di avere tipi come parametri di una classe: è possibile dichiarare metodi e/o classi generiche.
Classi generiche
Una classe generica è una classe che dipende da un tipo non specificato. Per convenzione il nome del tipo inizia con una maiuscola e, quando possibile, consiste in una sola lettera.
public class GenericTest<E>{
private E var;
public GenericTest(E var){
this.var = var;
}
public E getVar(){
return var;
}
public void setVar(E var){
this.var = var;
}
}
Quando si vuole definire un’istanza di una classe generica occorre indicare il tipo di dato che si passa come parametro: è possibile usare un qualsiasi tipo di riferimento (tipi che definiscono oggetti), ma NON tipi di dato primitivi.
GenericTest<Integer> intero = new GenericTest<Integer>(10);
Metodi generici
I metodo generici sono metodi che usano tipi generici dei parametri.
class PrintArrayGeneric{
public <E> void printArray(E el[]){
for(E a : el){
System.out.println(a);
}
}
}
Wildcard
Il carattere wildcard (?)può essere usato per rappresentare un tipo non definito.
Può essere usato come:
- tipo di un parametro
- tipo di un campo
- tipo di una variabile locale
- tipo di ritorno
È possibile vincolare il tipo specificato tramite wildcard ad essere un sottotipo di un tipo dato, ad esempio:
public void wildMethod(Collection <? extends SuperClass> collection);
In questo caso il metodo può gestire le sottoclassi di SuperClass
.
È possibile vincolare il tipo specificato tramite wildcard ad essere un tipo ereditato da un tipo dato, ad esempio:
public void wildMethod(Collection <? super SubClass> collection);
In questo caso il metodo può gestire le super-classi di SubClass
.