Что выведет код Middle Классы, data и sealed обновлено
when по sealed-иерархии
Вопрос
Что выведет код? По строке на каждый вывод.
sealed interface Result
data class Ok(val value: Int) : Result
data class Fail(val reason: String) : Result
data object Empty : Result
fun show(r: Result): String = when (r) {
is Ok -> "ok ${r.value}"
is Fail -> "fail: ${r.reason}"
Empty -> "empty"
}
fun main() {
listOf(Ok(1), Fail("timeout"), Empty).forEach { println(show(it)) }
println(Empty)
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: ok 1, fail: timeout, empty, Empty. when по sealed-интерфейсу полный, поэтому else не нужен.
Что выведет
ok 1
fail: timeout
empty
Empty
Разбор
when по sealed-интерфейсу полный, поэтому else не нужен. Для data object проверка без is, по равенству. Smart cast даёт доступ к r.value и r.reason внутри веток. data object печатается как своё имя Empty, у обычного object был бы вид Empty@6d06d69c.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.