代码之家  ›  专栏  ›  技术社区  ›  Héctor

强制编译器在“何时”语句中不包括所有实现时都会发出错误

  •  3
  • Héctor  · 技术社区  · 6 年前

    也许这是个荒谬的问题。我有一个方法接收 Command (密封类)和退货 Unit 我希望编译器崩溃 when 尚未实施分支:

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

    上面的代码没问题,但我不想编译它。

    当方法返回与 单位 ,它不编译:

    fun handle(cmd: Command) : Any {
      when(cmd) { //error, when must be exhaustive and requires all branches
        is FirstCommand -> //whatever     
      }
    }
    

    我想要那种行为但什么也不回报( 单位 )我知道为什么会这样,但我想知道是否有任何方法可以改变我的代码来实现我想要的。我需要把所有的 命令 实现,而不忘记任何可以稍后添加的对象。

    1 回复  |  直到 6 年前
        1
  •  5
  •   Héctor    6 年前

    解决了的。我不知道你能用 return 语句,即使方法返回 Unit :

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

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

    推荐文章