"Un alt subiect tare."

"Surprizele continuă să vină! Este ziua mea?"

"Astăzi, vă voi spune despre generice. Genericurile sunt tipuri care au un parametru. În Java, clasele container vă permit să indicați tipul obiectelor lor interioare."

„Când declarăm o variabilă generică, indicăm două tipuri în loc de unul: tipul de variabilă și tipul de date pe care le stochează.”

"ArrayList este un bun exemplu. Când creăm un nou obiect ArrayList, este convenabil să indicăm tipul valorilor care vor fi stocate în această listă."

Cod Explicaţie
ArrayList<String> list = new ArrayList<String>();
Creați o variabilă ArrayList numită list.
Atribuiți-i un obiect ArrayList.
Această listă poate stoca numai obiecte String .
ArrayList list = new ArrayList();
Creați o variabilă ArrayList numită list.
Atribuiți-i un obiect ArrayList. Această listă poate stoca orice valoare .
ArrayList<Integer> list = new ArrayList<Integer>();
Creați o variabilă ArrayList numită list.
Atribuiți-i un obiect ArrayList.
Această listă poate stoca doar Integerși intvalori.

„Sună super interesant. În special partea despre stocarea valorilor de orice tip .”

„Se pare doar că acesta este un lucru bun. În realitate, dacă punem șiruri într-o ArrayList într-o metodă și apoi ne așteptăm să conțină numere într-o altă metodă, programul se va prăbuși (se va termina cu o eroare).”

"Înțeleg."

„Deocamdată, nu ne vom crea propriile clase cu parametri de tip. Îi vom folosi doar pe cei existenți.”

„Orice clasă poate fi un parametru de tip, chiar și una pe care o scriu eu?”

"Da. Orice tip, cu excepția tipurilor primitive. Toți parametrii de tip trebuie să moștenească din clasa Object."

Vrei să spui că nu pot scrie ArrayList<int>?

„Într-adevăr, nu poți. Dar dezvoltatorii Java au scris clase wrapper pentru fiecare dintre tipurile primitive. Aceste clase moștenesc Object . Așa arată:”

Tipul primitiv Clasă Listă
int Întreg ArrayList< Integer >
dubla Dubla ArrayList< Double >
boolean boolean ArrayList< Boolean >
char Caracter ArrayList< Character >
octet octet ArrayList< Byte >

„Puteți atribui cu ușurință clase primitive și analogii lor (clasele wrapper) unul altuia:”

Exemple
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

"Genial. Cred că voi încerca să folosesc ArrayList mai des."