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

filterIsInstance и reified

Вопрос

Что выведет код? По строке на каждый вывод.

inline fun <reified T> List<Any?>.countOf(): Int = count { it is T }

fun main() {
    val mixed: List<Any?> = listOf(1, "a", 2.5, "b", null, 3)
    println(mixed.filterIsInstance<String>())
    println(mixed.countOf<Int>())
    println(mixed.countOf<Number>())
    println(mixed.countOf<Any>())
    println(mixed.countOf<Any?>())
}

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

Напишите, что выведет код: каждый вывод с новой строки.

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

Коротко

Код выведет: [a, b], 2, 3, 5, 6. filterIsInstance использует reified и оставляет строки.

Что выведет

[a, b]
2
3
5
6

Разбор

filterIsInstance использует reified и оставляет строки. Int в списке два элемента. Number это общий супертип Int и Double, их три. null is Any ложно, поэтому Any даёт 5, а null is Any? истинно, поэтому 6.

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

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