强制编译器在语句中未涵盖所有实现时发出错误"when"



也许这是一个荒谬的问题。我有一个接收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实现,而不会忘记以后可能添加的任何人。

已解决。我不知道即使方法返回Unit也可以使用return语句:

fun handle(cmd: Command) {
return when(cmd) {
is FirstCommand -> //whatever     
}
}

现在,上面的代码无法编译,因为when需要所有分支。正是我想要的。

最新更新