Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio 科特林';当';-如何在Android Studio中获取lint警告_Android Studio_Kotlin_Switch Statement - Fatal编程技术网

Android studio 科特林';当';-如何在Android Studio中获取lint警告

Android studio 科特林';当';-如何在Android Studio中获取lint警告,android-studio,kotlin,switch-statement,Android Studio,Kotlin,Switch Statement,因此,我的应用程序中有许多枚举,这些枚举在Kotlin中调用时使用 例如,我的枚举类 enum class MyFancyEnum { TYPE_A,TYPE_B, TYPE_C } 用于类似以下内容: when (it){ TYPE_A -> { ... } } sealed class MyFancyEnum { object TYPE_A : MyFancyEnum() object TYPE_B : MyFancyEnum() object TYPE_C

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

例如,我的枚举类

enum class MyFancyEnum {
  TYPE_A,TYPE_B, TYPE_C
}
用于类似以下内容:

when (it){
 TYPE_A -> { ... }
}
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 -> ...    
  }
}
我需要的是一个警告(或者更好的是一个错误),以防我忘记区分所有分支

我可以看到,编译器已经高亮显示了这一点,并在其上移动光标,我得到了一条类似的消息:

建议枚举上的“when”表达式为穷举表达式时,添加“…” 分支或“其他”分支

然而,在Android Studio中没有对此进行任何lint检查。(其中一个似乎是Java的switch case,但Kotlin的情况与之不同)

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

您可以使用

您可以将枚举迁移到密封类,并按如下方式使用它:

when (it){
 TYPE_A -> { ... }
}
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 -> ...    
  }
}

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

这是注释中建议的解决方法:添加一个空的
。另外{}
操作符到
when
表达式的末尾

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

这个技巧利用了Kotlin编译器本身,如果有人使用
when(){..}
表达式的结果,则需要覆盖
when
的所有分支。由于
。另外{}
在技术上使用
的结果时
,这会触发编译器错误。

您可以添加
。另外{}
强制
成为一个表达式时。不完全确定它的含义是什么。还有{},但我真正希望的是在我的代码检查中看到所有这些情况。因此请求Lint警告/错误。当
是一个表达式时,编译器将要求您涵盖所有可能的情况。这个想法听起来不错,但对我来说它确实可以编译。它只是陈述了一个稍微不同的消息,关于应该是详尽的密封类(而不是枚举)。我遗漏了什么吗?所以我可能会对scala的做法感到困惑。。。无论如何,该消息意味着并非所有密封类案例都包含在
when
子句中。因为我建议将您的枚举“转换”为密封类,所以您得到了一个警告,该警告涉及密封类的添加—请参阅本文—以及一句话:
,以允许我们的枚举保持状态,但让编译器验证我们涵盖了实例的所有情况,我们将声明更改为密封类
密封类和枚举之间没有实质性的功能差异,因此将它们重构为其他类不会改变澄清的内容@voddanok,这是一个“解决方案”。然而,这并不是很完美,因为我已经看到开发人员忘记在最后添加这个“任意”表达式,再次禁用检查。但谢谢你提供了一个可能的解决方案。完全正确。因为您已经使用了皮棉,所以进行皮棉检查会更好。不幸的是,我现在不知道如何使用Lint:(