undefined

Дженерики — что это?

Java Syntax
7 уровень , 7 лекция
Открыта

— И ещё одна крутая тема.

— Одни сюрпризы. Прямо не день, а день рождения.

— Сегодня я расскажу тебе, что такое Generics. “Дженерики” – это типы с параметром. В Java классы-контейнеры позволяют указывать тип их внутренних объектов.

— Когда мы объявляем generic-переменную, то мы указываем не один тип, а два: тип переменной и тип данных, которые она у себя хранит.

Хороший пример этого – ArrayList. Когда мы создаём новый объект/переменную типа ArrayList, нам удобно указать, значения какого типа будут храниться внутри этого списка.

Код Пояснение
ArrayList<String> list = new ArrayList<String>();
Мы создали переменную list типа ArrayList.
Занесли в нее объект типа ArrayList.
В таком списке можно хранить только переменные типа String.
ArrayList list = new ArrayList();
Мы создали переменную list типа ArrayList.
Занесли в нее объект типа ArrayList.В таком листе можно хранить переменные любого типа.
ArrayList<Integer> list = new ArrayList<Integer>();
Мы создали переменную list типа ArrayList.
Занесли в нее объект типа ArrayList.
В таком листе можно хранить только переменные типа Integer и int.

— Звучит очень интересно. Особенно про любой тип.

— Это только кажется, что это хорошо. На самом деле, если в одном методе в ArrayList кладутся строки, а в другом мы работаем с его содержимым и ожидаем, что там будут только числа, программа упадет (закроется с ошибкой).

— Ясно.

— Пока что мы не будем создавать свои классы с типами-параметрами, но будем использовать чужие.

— А в качестве типа-параметра можно поставить любой класс, даже тот, что напишу я?

— Да, любой тип, кроме примитивных типов. Все классы-параметры должны быть унаследованы от класса Object.

— То есть, я не могу написать ArrayList<int>?

— В общем-то, да, не можешь. Но для примитивных типов разработчики языка Java написали их непримитивные аналоги — классы, унаследованные от Object. Вот как это будет выглядеть:

Примитивный тип Класс Список
int Integer ArrayList<Integer>
double Double ArrayList<Double>
boolean Boolean ArrayList<Boolean>
char Character ArrayList<Character>
byte Byte ArrayList<Byte>

— Примитивные типы и их классы-аналоги (классы-обёртки) можно спокойно присваивать друг другу:

Примеры
int a = 5;
Integer b = a;
int c = b;

Character c = 'c'; //литерал 'c' имеет тип char
char d = c;
Byte b = (byte) 77; //литерал 77 имеет тип int
Boolean isOk = true; //литерал true имеет тип boolean
Double d = 1.0d; //литерал 1.0d имеет тип double

— Отлично. Тогда я думаю, я буду почаще использовать ArrayList.

Комментарии (165)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Alexander G. 8 уровень, Москва
12 мая 2021
поставьте пож лайк для ачивки
Vitaly Makarenko 8 уровень, Москва
9 марта 2021
поставьте лайк для ачивки , кому не сложно
Антон Лиманский 13 уровень, Санкт-Петербург
11 февраля 2021
Бродяги 7ого уровня, поставьте лайк для ачивки🧔 Всем удачи!))
Domingo el Sumeri 9 уровень, Екатеринбург
11 февраля 2021
Видео лекция про дженерики и их использовании в объектах Collections. У меня многое встало по своим местам, надеюсь правильно) Generics, Collections - Java для тестировщиков
Петр Селищев 18 уровень, Санкт-Петербург
1 января 2021
Хорошая статья по классу ArrayList с подробными схемами: https://javarush.ru/groups/posts/2472-podrobnihy-razbor-klassa-arraylist
Богдан 9 уровень, Днепр
12 декабря 2020
ох божечки... вот листаю задачки, статейки, пытаюсь постигнуть дзен, уже и 7-й уровень, и всё-равно возникает ужас надвигающегося дэдлайна в виде того, что помимо языка java нужно еще выучить язык inglish (да-да, именно такой мой уровень...). Плак-плак... а без него же никуда...
Александр 17 уровень, Санкт-Петербург
23 ноября 2020
Кому интересно, про дженерики можно почитать немного тут: https://metanit.com/java/tutorial/3.11.php вполне доходчиво написано.
Сергей 15 уровень, Липецк
1 ноября 2020
Вот ещё хороший урок про дженерики от Follow the white rabbit
Джава с Татуина 22 уровень, Новосибирск
11 октября 2020
В следующей лекции - узнаете, как это будет на Pascal.
iLZEIN 9 уровень, Москва
9 октября 2020
Трудяги поставьте лайк для ачивки пожалуйста ,заранее спасибо. Всех благ вам и терпения)