【问题标题】:Can you use a list of enum values in Kotlins when?什么时候可以在 Kotlins 中使用枚举值列表?
【发布时间】:2020-06-25 14:22:24
【问题描述】:

我想知道是否可以在when 语句中使用列表以使其详尽无遗。假设我们有以下枚举:

enum class SomeType {
    TYPE_ONE,
    TYPE_TWO,
    TYPE_THREE;

    companion object {
        fun groupThese() = listOf(TYPE_TWO, TYPE_THREE)
    }
}

如果我们现在想为这个枚举做一个详尽的 when 语句,我们可以使用列表groupThese() 吗?

when (type) {
    TYPE_ONE -> doSomething()
    SomeType.groupThese() -> doSomethingElse() //this does obviously not work
}

我知道我可以在 when 中显式地写下枚举值,但我想将列表保存在一个地方,因此如果将来必须更改它,我只需要更改一次。

【问题讨论】:

    标签: kotlin enums switch-statement


    【解决方案1】:

    函数groupThese()返回一个list,所以你可以使用运算符in

    when (type) {
        SomeType.TYPE_ONE -> doSomething()
        in SomeType.groupThese() -> doSomethingElse()
        else -> doSomethingDifferent()
    }
    

    文档:When Expression

    在这种情况下else 也可以工作:

    when (type) {
        SomeType.TYPE_ONE -> doSomething()
        else -> doSomethingElse()
    }
    

    【讨论】:

    • 这并不详尽。收到错误'when' expression must be exhaustive, add necessary 'TYPE_TWO', 'TYPE_THREE' branches or 'else' branch instead
    • 对于您发布的示例,您只需要其他。如果枚举中还有其他值,则添加一个 else 部分。我编辑了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2010-10-11
    • 2019-10-10
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2020-01-30
    相关资源
    最近更新 更多