【问题标题】:Check for several type inside when statement in Kotlin在 Kotlin 中的 when 语句中检查几种类型
【发布时间】:2019-05-05 22:25:04
【问题描述】:

假设我有以下内容:

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
}

【问题讨论】:

  • is Red, is Green, is Blue -> ...

标签: kotlin typechecking kotlin-when


【解决方案1】:

是的。根据when的语法

什么时候 :“何时”(“(”表达式“)”)? “{” 何时进入* “}” ; 何时进入 : whenCondition{","} "->" controlStructureBody SEMI : "else" "->" controlStructureBody SEMI ; 当条件 : 表达 : ("in" | "!in") 表达式 : ("is" | "!is") 类型 ;

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

【讨论】:

    【解决方案2】:

    除了其他答案之外,您还可以通过完全省略 is 来更简洁地做到这一点:

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

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

    【讨论】:

    • 我突然想到 OP 写的内容甚至可以工作......它将检查 Red 的类型以及 GreenBlue 的值。我假设 OP 已经尝试过他们建议的解决方案,但他们可能没有(幸运的是,现在我们都对可能的选择有了更清晰的了解)。感谢您提供更多见解。
    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2021-09-13
    • 2022-10-18
    相关资源
    最近更新 更多