
Originariamente inviata da
sharkkk
volevo chiedere a cosa servono i "tipi generici", non riesco a capire la loro utilità

Immagina di dover fare una classe Coppia che deve contenere 2 oggetti dello stesso tipo. Ma il tipo può essere uno qualunque. Senza i generics (pre Java 5) l'unica soluzione era Object.
codice:
public class Coppia {
private Object primo;
private Object secondo;
// costruttore/i, metodi getter/setter, ecc...
}
A parte il fatto che in questo modo non è possibile impedire, a livello di compilazione, di usare tipi differenti. Il che potrebbe andare bene oppure no. Ma in ogni caso i metodi setter/getter trattano Object e per i getter, ogni volta che ottieni l'oggetto devi fare tu un cast esplicito al tuo tipo specifico (es. String). Ovviamente scomodo e potenzialmente causa di errori.
Da Java 5 puoi fare:
codice:
public class Coppia<T> {
private T primo;
private T secondo;
// costruttore/i, metodi getter/setter, ecc...
}
Ora puoi scrivere es.:
codice:
Coppia<String> coppiaDiStringhe = new Coppia<String>();
coppiaDiStringhe.setPrimo("aaa");
String valore1 = coppiaDiStringhe.getPrimo();
A livello di compilazione diventa type-safe. Non puoi fare coppiaDiStringhe.setPrimo(123); (o qualunque altro valore non String). Il compilatore te lo impedisce subito.
E inoltre viene inserito un cast implicito quando estrai un valore, ovvero quando usi uno dei metodi getter.