Ответ
Дженерики (Generics) — это механизм параметризации типов в Java, позволяющий создавать классы, интерфейсы и методы, которые работают с различными типами данных, обеспечивая безопасность типов на этапе компиляции.
Основная цель:
- Типобезопасность: Компилятор проверяет соответствие типов, предотвращая ошибки
ClassCastExceptionво время выполнения. - Устранение приведения типов: Код становится чище, исчезает необходимость в явных кастах
(String). - Повторное использование кода: Один обобщённый алгоритм или структура данных может работать с разными типами.
Пример обобщённого класса:
public class Container<T> {
private T item;
public void setItem(T item) { this.item = item; }
public T getItem() { return item; }
}
// Использование с конкретным типом
Container<String> stringContainer = new Container<>();
stringContainer.setItem("Text");
String value = stringContainer.getItem(); // Без приведения типа!
Container<Integer> intContainer = new Container<>();
intContainer.setItem(123);
Важные особенности и ограничения:
- Стирание типов (Type Erasure): Информация о generic-типах удаляется во время компиляции и недоступна в runtime.
List<String>иList<Integer>в runtime — это простоList. - Нельзя использовать примитивы: Вместо
Tнельзя подставитьint. Используются классы-обёртки:Integer,Doubleи т.д. - Ограничения при создании экземпляров: Нельзя создать объект generic-типа:
new T()или массивnew T[size]. - Wildcards (
?,? extends,? super): Позволяют создавать гибкие API, работающие с семействами типов.