Карточка Middle Дженерики и вариантность обновлено
Инвариантность, out и in
Вопрос
Объясни на примере Box<T>, Box<out T>, Box<in T>.
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
Инвариантный Box<T: Box<String и Box<Any не связаны. Box<out T (производитель, только возвращает T): Box<String подтип Box<Any, как List.
Ответ
Инвариантный Box<T>: Box<String> и Box<Any> не связаны. Box<out T> (производитель, только возвращает T): Box<String> подтип Box<Any>, как List. Box<in T> (потребитель, только принимает T): Box<Any> подтип Box<String>, как Comparator.
Разбор
Инвариантный Box<T>: Box<String> и Box<Any> не связаны. Box<out T> (производитель, только возвращает T): Box<String> подтип Box<Any>, как List. Box<in T> (потребитель, только принимает T): Box<Any> подтип Box<String>, как Comparator.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Дженерики и вариантность»
- Проверка is List<String> и стирание типов
- Вариантность в объявлении и в месте использования
- Конфликт перегрузок из-за стирания
- Почему List<String> можно передать как List<Any>
- Дженерики Kotlin и Java
- Ковариантный ящик и Nothing
- filterIsInstance и reified
- Что означает out T