Заставить компилятор выдавать ошибку, когда не все реализации покрыты выражением "когда"
Может быть, это абсурдный вопрос. У меня есть метод, который получает 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
реализации, не забывая никого, что может быть добавлено позже.
1 ответ
Решаемые. Я не знал, что ты можешь использовать return
оператор, даже когда метод возвращает Unit
:
fun handle(cmd: Command) {
return when(cmd) {
is FirstCommand -> //whatever
}
}
Теперь код выше не компилируется, потому что when
нужны все ветки. Как раз то, что я хотел.