假设我具有以下条件:
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
}
答案 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既是对象又是类型,这就是两者都起作用的原因。我怀疑这种方式也可能效率更高。)