因此我的应用程序中有许多枚举,这些枚举在 调用中被Kotlins使用。
例如我的枚举类
enum class MyFancyEnum {
TYPE_A,TYPE_B, TYPE_C
}
用于这样的事情:
when (it){
TYPE_A -> { ... }
}
如果我忘记区分所有分支,我需要的是警告(甚至更好的错误)。
我可以看到,编译器已经在突出显示该内容,并在其上移动光标,我得到一条类似于该内容的消息:
建议枚举上的'when'表达式详尽无遗,请添加'...' 分支或“其他”分支
但是,Android Studio中对此没有任何检查。 (对于Java来说似乎是一种切换情况,但对于Kotlin来说却没有类似的情况。)
问题: 万一在when表达式中忘记了一个分支,如何获得Lint警告/错误?
答案 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 -> ...
}
}
在那种情况下,它甚至不会编译,因为并不是所有密封的类选项都得到处理。