"Un altro argomento interessante."

"Le sorprese continuano ad arrivare! È il mio compleanno?"

"Oggi ti parlerò dei generici. I generici sono tipi che hanno un parametro. In Java, le classi contenitore ti permettono di indicare il tipo dei loro oggetti interni."

"Quando dichiariamo una variabile generica, indichiamo due tipi invece di uno: il tipo di variabile e il tipo di dati che memorizza."

"ArrayList è un buon esempio. Quando creiamo un nuovo oggetto ArrayList, è conveniente indicare il tipo di valori che verranno memorizzati all'interno di questo elenco."

Codice Spiegazione
ArrayList<String> list = new ArrayList<String>();
Crea una variabile ArrayList chiamata list.
Assegnagli un oggetto ArrayList.
Questo elenco può memorizzare solo oggetti String .
ArrayList list = new ArrayList();
Crea una variabile ArrayList chiamata list.
Assegnagli un oggetto ArrayList. Questo elenco può memorizzare qualsiasi valore .
ArrayList<Integer> list = new ArrayList<Integer>();
Crea una variabile ArrayList chiamata list.
Assegnagli un oggetto ArrayList.
Questo elenco può solo memorizzare Integere intvalori.

"Sembra molto interessante. Specialmente la parte sulla memorizzazione di valori di qualsiasi tipo ."

"Sembra solo che sia una buona cosa. In realtà, se inseriamo stringhe in un ArrayList in un metodo e poi ci aspettiamo che contenga numeri in un altro metodo, il programma andrà in crash (terminerà con un errore)."

"Vedo."

"Per ora, non creeremo le nostre classi con parametri di tipo. Useremo solo quelli esistenti."

"Qualsiasi classe può essere un parametro di tipo, anche quella che scrivo?"

"Sì. Qualsiasi tipo tranne i tipi primitivi. Tutti i parametri di tipo devono ereditare dalla classe Object."

" Vuoi dire che non posso scrivere ArrayList<int>? "

"In effetti, non puoi. Ma gli sviluppatori Java hanno scritto classi wrapper per ciascuno dei tipi primitivi. Queste classi ereditano Object . Ecco come appare:"

Tipo primitivo Classe Elenco
int Numero intero ArrayList< Numero intero >
Doppio Doppio ArrayList< Doppio >
booleano Booleano ArrayList< booleano >
char Carattere ArrayList <Carattere> _
byte Byte ArrayList< Byte >

"Puoi facilmente assegnare le classi primitive e i loro analoghi (classi wrapper) l'una all'altra:"

Esempi
int a = 5;
Integer b = a;
int c = b;

Character c = 'c';  //the literal c is a char
char d = c;
Byte b = (byte) 77;  // The literal 77 is an int
Boolean isOk = true;  // the literal true is a boolean
Double d = 1.0d;  // The literal 1.0d is a double

"Fantastico. Penso che proverò a usare ArrayList più spesso."