Выбор ответа Middle Дженерики и стирание обновлено
new T()
Вопрос
Почему внутри class Box<T> нельзя написать new T()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Из-за стирания тип T неизвестен в рантайме, поэтому создать объект нельзя. В рантайме T стёрт до своей границы, JVM не знает, какой класс создавать.
Варианты ответа
- Из-за стирания тип T неизвестен в рантайме, поэтому создать объект нельзяправильный ответ
- Потому что у T может не быть конструктора без параметров, а других причин нет
- Можно, если T ограничен через
extends Object - Можно начиная с Java 17
Разбор
В рантайме T стёрт до своей границы, JVM не знает, какой класс создавать. Обходной путь: передать Supplier<T> или Class<T> и вызвать clazz.getDeclaredConstructor().newInstance(). Отсутствие конструктора без параметров тоже проблема, но не главная причина: даже с ним new T() запрещён. Граница extends Object ничего не меняет, и ни одна версия Java это не разрешила.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.