Java 8 обобщения

Цикл статей «Учебник Java 8».

Следующая статья — «Java 8 исключения».
Предыдущая статья — «Java 8 ещё раз о перегрузке методов».

Обобщения (Generics) позволяют указать ограничения, накладываемое на поведение класса или методов, в терминах неизвестных типов.

Содержание

Простой класс Lair
Обобщённая версия класса Lair
Соглашение об именовании переменных типа
Создание экземпляра обобщённого типа и обращение к нему
Бриллиантовая операция (Diamond operator)
Несколько параметров типа
Параметризованный тип
Сырой тип (Raw type)
Сообщения об ошибках “unchecked”
Обобщённые методы
Ограниченные параметры типа
Обобщения, наследование и дочерние типы
Выведение типов
Выведение типов и обобщённый методы
Выведение типов и создание экземпляра обобщённого класса
Выведение типа и обобщённые конструкторы обобщённых и необобщённых классов
Целевые типы
Подстановочный символ (wildcard)
Подстановочный символ, ограниченный сверху (Upper bounded wildcard)
Неограниченный подстановочный символ (Unbounded wildcard)
Ограниченный снизу подстановочный символ (Lower bound Wildcard)
Подстановочные символы и дочерние типы
Захват символа подстановки (Wildcard Capture) и вспомогательные методы
Руководство по использованию подстановочного символа
Стирание типа (Type Erasure)
Стирание типа в обобщённых типах
Стирание типа в обобщённых методах
Влияние стирания типа и методы-мосты (bridge methods)
— —Методы-мосты (Bridge Methods)
Загрязнение кучи (Heap pollution)
Потенциальные уязвимости методов с произвольным числом параметров с нематериализуемыми формальными параметрами
Подавление предупреждений для методов с произвольным количеством параметров с нематериализуемыми формальными параметрами
Ограничения обобщений
Нельзя создавать экземпляры обобщённых типов с примитивными типами в качестве аргументов типа.
Нельзя создавать экземпляры параметров типа
Нельзя объявлять статические поля с типом параметра типа
Нельзя использовать приведения типа или instanceof с параметризованными типами
Невозможно создавать массивы параметризованных типов
Нельзя создавать, ловить (catch) или бросать (throw) объекты параметризованных типов
Нельзя перегружать метод так, чтобы формальные параметры типа стирались в один и тот же сырой тип

Читать далее Java 8 обобщения