"Още една готина тема."

"Изненадите продължават да идват! Имам ли рожден ден?"

"Днес ще ви разкажа за генериците. Генериците са типове, които имат параметър. В Java контейнерните класове ви позволяват да посочите типа на техните вътрешни обекти."

„Когато декларираме обща променлива, ние посочваме два типа instead of един: типа на променливата и типа на данните, които съхранява.“

„ArrayList е добър пример. Когато създаваме нов обект ArrayList, е удобно да посочим типа на стойностите, които ще се съхраняват в този списък.“

Код Обяснение
ArrayList<String> list = new ArrayList<String>();
Създайте променлива ArrayList, наречена list.
Присвоете му обект ArrayList.
Този списък може да съхранява само String обекти.
ArrayList list = new ArrayList();
Създайте променлива ArrayList, наречена list.
Присвоете му обект ArrayList. Този списък може да съхранява всяHowви стойности .
ArrayList<Integer> list = new ArrayList<Integer>();
Създайте променлива ArrayList, наречена list.
Присвоете му обект ArrayList.
Този списък може да съхранява само стойности Integerи int.

„Звучи супер интересно. Особено частта за съхраняване на стойности от всяHowъв тип .“

„Изглежда, че това е нещо добро. В действителност, ако поставим низове в ArrayList в един метод и след това очакваме да съдържа числа в друг метод, програмата ще се срине (прекратява с грешка).“

"Виждам."

„Засега няма да създаваме наши собствени класове с параметри на типа. Просто ще използваме съществуващите.“

„Може ли всеки клас да бъде тип параметър, дори този, който пиша?“

"Да. Всеки тип с изключение на примитивните типове. Всички параметри на типа трябва да наследяват от класа Object."

" Искате да кажете, че не мога да напиша ArrayList<int>? "

„Наистина не можете. Но разработчиците на Java са написали обвиващи класове за всеки от примитивните типове. Тези класове наследяват Object . Ето How изглежда:“

Примитивен тип Клас списък
вътр Цяло число ArrayList< Цяло число >
двойно Двойна ArrayList< Double >
булево Булева стойност ArrayList< Boolean >
въглен Характер ArrayList< символ >
byte Байт ArrayList< byte >

„Можете лесно да присвоите примитивни класове и техните аналози (обвиващи класове) един към друг:“

Примери
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

„Страхотно. Мисля, че ще се опитам да използвам ArrayList по-често.“