在 Kotlin 中检查 when 语句中的几种类型

Check for several type inside when statement in Kotlin

假设我有以下内容:

sealed class Color(val name: String) {
    object Red : Color("red")
    object Green : Color("green")
    object Blue : Color("blue")
    object Pink : Color("pink")
    object Yellow : Color("yellow")
}

是否可以使用 when 语句检查颜色是否是主要颜色,即:

when(color) {
    is Red, Green, Blue -> // primary color work
    is Pink -> // pink color work
    is Yellow -> // yellow color work
}

是的。根据when

的语法

when
  : "when" ("(" expression ")")? "{"
        whenEntry*
    "}"
  ;
whenEntry
  : whenCondition{","} "->" controlStructureBody SEMI
  : "else" "->" controlStructureBody SEMI
  ;
whenCondition
  : expression
  : ("in" | "!in") expression
  : ("is" | "!is") type
  ;

{","}表示元素可以重复多次,用逗号分隔。但是请注意,您也必须重复 is,如果您使用不同的不相关类型,智能广播将无法工作。

除了其他答案之外,您还可以通过完全省略 is 来更简洁地完成此操作:

when (color) {
    Red, Green, Blue -> // ...
    Pink -> // ...
    Yellow -> // ... 
}

这是检查 是否相等,这与检查 类型 is 代码不同。 (红色、绿色和 &c 既是对象又是类型,这就是两者都有效的原因。我怀疑这种方式也可能稍微更有效。)