Kotlin'when'-如何在Android Studio中获得棉绒警告

时间:2019-06-03 09:31:48

标签: android-studio kotlin switch-statement

因此我的应用程序中有许多枚举,这些枚举在 调用中被Kotlins使用。

例如我的枚举类

enum class MyFancyEnum {
  TYPE_A,TYPE_B, TYPE_C
}

用于这样的事情:

when (it){
 TYPE_A -> { ... }
}

如果我忘记区分所有分支,我需要的是警告(甚至更好的错误)。

我可以看到,编译器已经在突出显示该内容,并在其上移动光标,我得到一条类似于该内容的消息:

  

建议枚举上的'when'表达式详尽无遗,请添加'...'   分支或“其他”分支

但是,Android Studio中对此没有任何检查。 (对于Java来说似乎是一种切换情​​况,但对于Kotlin来说却没有类似的情况。)

问题: 万一在when表达式中忘记了一个分支,如何获得Lint警告/错误?

2 个答案:

答案 0 :(得分:1)

这是在注释中建议的解决方法:在.also{}表达式的末尾添加一个空的when运算符。

 when (it){
     TYPE_A -> { ... }
 }.also{}

此技巧利用了Kotlin编译器本身,如果某人使用when表达式的结果,则它必须覆盖when() { .. }的所有分支。由于.also{}从技术上使用when的结果,因此会触发编译器错误。

答案 1 :(得分:0)

您可以使用sealed classes来实现。

您可以将枚举迁移到密封类,并像这样使用它:

sealed class MyFancyEnum {
   object TYPE_A : MyFancyEnum()
   object TYPE_B : MyFancyEnum()
   object TYPE_C : MyFancyEnum()
}

fun setFancyEnum(fancyEnum: MyFancyEnum) {
   when(fancyEnum) {
     is MyFancyEnum.TYPE_A -> ...
     is MyFancyEnum.TYPE_B -> ...    
  }
}

在那种情况下,它甚至不会编译,因为并不是所有密封的类选项都得到处理。

相关问题