在 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 既是对象又是类型,这就是两者都有效的原因。我怀疑这种方式也可能稍微更有效。)
假设我有以下内容:
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 既是对象又是类型,这就是两者都有效的原因。我怀疑这种方式也可能稍微更有效。)