Kotlin 是否允许您为枚举分配自定义值?

s-h*_*ter 9 enums kotlin

这引发了错误:线程“main” java.lang.IllegalArgumentException中的异常:没有枚举常量Color.red

enum class Color(val value: String = "") {
    RED("red"),
    YELLOW("yellow"),
    BLUE("blue")
}

fun main() {    
   print(Color.valueOf("red"))
}
Run Code Online (Sandbox Code Playgroud)

仅当我将 print 语句更改为:

   print(Color.valueOf("RED"))
Run Code Online (Sandbox Code Playgroud)

是否可以使用自定义字符串通过 valueOf 分配给枚举值?

gid*_*dds 11

正如您所发现的,枚举valueOf()方法通过枚举常量的名称进行查找,而不是通过您添加的任何属性进行查找。

但是您可以使用您想要的任何标准轻松添加自己的查找方法:

enum class Color(val hue: String) {
    RED("red"),
    YELLOW("yellow"),
    BLUE("blue");

    companion object {
        fun forHue(hue: String) = values().find{ it.hue == hue }
    }
}
Run Code Online (Sandbox Code Playgroud)

调用按预期Color.forHue("red")返回实例。Color.RED

(这可能是最简单的方法,但不是最有效的;请参阅诸如此类的答案


Ste*_*gin 1

when不可以,但是你可以编写自己的方法并通过迭代、或映射来获取值。

另外,您不能覆盖valueOf.