Выбор ответа Middle Дженерики и вариантность обновлено

Верхняя граница T по умолчанию

Вопрос

Какое значение может принять T в fun <T> f(x: T)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Любые, включая nullable: граница по умолчанию Any? Неограниченный параметр T имеет верхнюю границу Any?, поэтому f(null) компилируется и T выводится как Nothing?.

Варианты ответа

  1. Только non-null типы, nullable надо разрешать явно
  2. Только классы, не интерфейсы и не функциональные типы
  3. Любые, включая nullable: граница по умолчанию Any?правильный ответ
  4. Только примитивы и String

Разбор

Неограниченный параметр T имеет верхнюю границу Any?, поэтому f(null) компилируется и T выводится как Nothing?. Чтобы запретить null, пишут <T : Any>. Так часто ошибаются при написании кеша или репозитория: T внутри оказывается nullable, и x.hashCode() требует безопасного вызова.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.