当 "when" 语句中未涵盖所有实现时,强制编译器发出错误
Force compiler to emit an error when not all implementations are covered in "when" statement
也许这是一个荒谬的问题。我有一个接收 Command
(密封 class)和 returns Unit
的方法,我希望编译器崩溃是否所有 when
分支都没有实施:
sealed class Command
class FirstCommand : Command()
class SecondCommand: Command()
fun handle(cmd: Command) {
when(cmd) {
is FirstCommand -> //whatever
}
}
上面的代码没问题,但我希望它不编译。
当方法 returns 与 Unit
不同时,它不会编译:
fun handle(cmd: Command) : Any {
when(cmd) { //error, when must be exhaustive and requires all branches
is FirstCommand -> //whatever
}
}
我想要那种行为但什么都不返回 (Unit
)。我明白为什么会这样,但我想知道是否有任何方法可以更改我的代码以实现我想要的。我需要涵盖所有 Command
实现,而不会忘记以后可能添加的任何人。
已解决。我不知道即使方法 returns Unit
:
也可以使用 return
语句
fun handle(cmd: Command) {
return when(cmd) {
is FirstCommand -> //whatever
}
}
现在,上面的代码无法编译,因为 when
需要所有分支。正是我想要的。
也许这是一个荒谬的问题。我有一个接收 Command
(密封 class)和 returns Unit
的方法,我希望编译器崩溃是否所有 when
分支都没有实施:
sealed class Command
class FirstCommand : Command()
class SecondCommand: Command()
fun handle(cmd: Command) {
when(cmd) {
is FirstCommand -> //whatever
}
}
上面的代码没问题,但我希望它不编译。
当方法 returns 与 Unit
不同时,它不会编译:
fun handle(cmd: Command) : Any {
when(cmd) { //error, when must be exhaustive and requires all branches
is FirstCommand -> //whatever
}
}
我想要那种行为但什么都不返回 (Unit
)。我明白为什么会这样,但我想知道是否有任何方法可以更改我的代码以实现我想要的。我需要涵盖所有 Command
实现,而不会忘记以后可能添加的任何人。
已解决。我不知道即使方法 returns Unit
:
return
语句
fun handle(cmd: Command) {
return when(cmd) {
is FirstCommand -> //whatever
}
}
现在,上面的代码无法编译,因为 when
需要所有分支。正是我想要的。