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

时间:2018-12-04 13:16:35

标签: kotlin typechecking kotlin-when

假设我具有以下条件:

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
}

2 个答案:

答案 0 :(得分:4)

是的。根据{{​​3}}

的语法

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

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

答案 1 :(得分:1)

除了其他答案之外,您还可以通过完全省略is来使其更加简洁:

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

这是在检查是否相等,这不同于is代码正在检查类型。 (红色,绿色和&c既是对象又是类型,这就是两者都起作用的原因。我怀疑这种方式也可能效率更高。)