С закрытыми классами вы можете использовать исчерпывающие выражения 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?