这将引发错误:线程“主”中的异常 java.lang.IllegalArgumentException:没有枚举常量Color.red
enum class Color(val value: String = "") {
RED("red"),
YELLOW("yellow"),
BLUE("blue")
}
fun main() {
print(Color.valueOf("red"))
}
仅当我将打印语句更改为以下内容时,以上内容才有效:
print(Color.valueOf("RED"))
是否可以使用自定义字符串通过valueOf分配给枚举值?
答案 0 :(得分:1)
否,但是您可以编写自己的方法并通过迭代,when
或映射来获取值。
此外,您不能覆盖valueOf
。
答案 1 :(得分:0)
您发现,枚举valueOf()
方法是按枚举常量的名称查找的,而不是按您添加的任何属性查找的。 p>
但是您可以使用所需的任何条件轻松添加自己的查找方法:
enum class Color(val hue: String) {
RED("red"),
YELLOW("yellow"),
BLUE("blue");
companion object {
fun forHue(hue: String) = values().find{ it.hue == hue }
}
}
对Color.forHue("red")
的调用将按预期返回Color.RED
实例。
(这可能是最简单的方法,但不是最有效;请参见诸如this之类的答案。)
答案 2 :(得分:0)
您可以实现自己的valueOf
,不区分大小写:
enum class Color(val value: String = "") {
RED("red"),
YELLOW("yellow"),
BLUE("blue");
companion object {
//TODO: gimme a better name
fun customValueOf(val: String) = valueOf(val.toUpperCase())
}
}