Выбор ответа Middle Дженерики и вариантность спрашивают часто обновлено
Проверка is List<String> и стирание типов
Вопрос
Почему if (x is List<String>) не компилируется при x: Any?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Аргументы дженериков стираются, рантайм их не знает. При компиляции на JVM аргументы дженериков стираются, объект знает только, что он List.
Варианты ответа
isнельзя использовать с интерфейсами, только с классами- Аргументы дженериков стираются, рантайм их не знаетправильный ответ
- Нужно писать
x instanceof List<String>, как в Java - Дженерики с
isработают только с классами из stdlib
Разбор
При компиляции на JVM аргументы дженериков стираются, объект знает только, что он List. Поэтому компилятор запрещает проверку «cannot check for instance of erased type». Можно x is List<*>, а для конкретного типа элементов проверять сами элементы или использовать reified. is с интерфейсами работает, instanceof это синтаксис Java.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.