Какие типы данных можно использовать в качестве параметров типа в Generics Java?
Подробное объяснение
В Java Generics параметрами типа могут быть только ссылочные типы (reference types), такие как классы, интерфейсы, массивы и типы-обёртки (например, Integer, Double). Примитивные типы (int, double, boolean и т.д.) использовать напрямую нельзя. Если необходимо параметризовать generic примитивом, следует использовать соответствующий класс-обёртку. Таким образом, правильный ответ: String (ссылочный тип).
Часто задаваемые вопросы (FAQ)
1
Можно ли использовать int в качестве параметра типа в Generics?
Нет, примитивные типы (int, double и т.д.) нельзя использовать напрямую. Вместо них нужно использовать классы-обёртки (Integer, Double и т.д.).
2
Почему нельзя использовать примитивы в Generics?
Generics в Java реализованы с помощью стирания типов (type erasure), и во время выполнения информация о параметре типа удаляется. Примитивные типы не являются объектами и не могут быть представлены в виде Object, поэтому их использование недопустимо.
3
Какие типы можно использовать в качестве параметров типа?
Любые ссылочные типы: классы (например, String, ArrayList), интерфейсы, массивы, а также классы-обёртки примитивов (Integer, Boolean и т.д.).
Типичные ошибки
1
Использование примитивных типов (int, double) в угловых скобках.
Это синтаксическая ошибка. Примитивные типы не могут быть параметрами типа. Правильно использовать классы-обёртки, например, List<Integer>.
2
Попытка использовать null в качестве параметра типа.
null не является типом, поэтому его нельзя указывать в угловых скобках. Параметр типа должен быть конкретным ссылочным типом.
3
Смешение примитивов и ссылочных типов в одном generic-коде без автоупаковки.
Хотя автоупаковка (autoboxing) может преобразовывать примитивы в обёртки при присваивании, в объявлении параметра типа нужно указывать именно класс-обёртку. Например, List<Integer> list = new ArrayList<>(); list.add(5); – здесь 5 упаковывается в Integer.