С закрытыми классами вы можете использовать исчерпывающие выражения when
и опустить предложение else
, когда выражение возвращает результат:
sealed class SealedClass {
class First : SealedClass()
class Second : SealedClass()
}
fun test(sealedClass: SealedClass) : String =
when (sealedClass) {
is SealedClass.First -> "First"
is SealedClass.Second -> "Second"
}
Теперь, если бы я должен был добавить Third
в SealedClass
, компилятор будет жаловаться, что выражение when
в test()
не является исчерпывающим, и мне нужно добавить предложение для Third
или else
.
Мне интересно, однако, если эта проверка также может быть применена, когда test()
ничего не возвращает:
fun test(sealedClass: SealedClass) {
when (sealedClass) {
is SealedClass.First -> doSomething()
is SealedClass.Second -> doSomethingElse()
}
}
Этот фрагмент не прерывается, если добавлен Third
.
Я могу добавить инструкцию return
до when
, но это можно легко забыть и может сломаться, если тип возврата одного из предложений не Unit
.
Как я могу убедиться, что не забудьте добавить ветвь в мои предложения when
?