Может это абсурдный вопрос. У меня есть метод, который получает Command
(запечатанный класс) и возвращает Unit
, и я хочу, чтобы компилятор аварийно завершил работу, если не были реализованы все ветки when
:
sealed class Command
class FirstCommand : Command()
class SecondCommand: Command()
fun handle(cmd: Command) {
when(cmd) {
is FirstCommand -> //whatever
}
}
Приведенный выше код в порядке, но я бы не хотел, чтобы он компилировался.
Когда метод возвращает что-то отличное от Unit
, он не компилируется:
fun handle(cmd: Command) : Any {
when(cmd) { //error, when must be exhaustive and requires all branches
is FirstCommand -> //whatever
}
}
Я хочу такого поведения, но ничего не возвращаю (Unit
). Я понимаю, почему это происходит, но мне интересно, есть ли способ изменить свой код, чтобы достичь того, чего я хочу. Мне нужно охватить все Command
реализации, не забывая обо всех, что могут быть добавлены позже.