Esto arroja el error: Excepción en el hilo "principal" java.lang.IllegalArgumentException: Sin enumeración constante Color.red
enum class Color(val value: String = "") { RED("red"), YELLOW("yellow"), BLUE("blue") } fun main() { print(Color.valueOf("red")) }Lo anterior solo funcionará si cambio la declaración de impresión a:
print(Color.valueOf("RED"))¿Es posible usar una cadena personalizada para asignar a un valor de enumeración usando valueOf?
Como descubrió, el método enum valueOf() busca por el nombre de la constante de enumeración, no por las propiedades que agregue.
Pero puede agregar fácilmente su propio método de búsqueda, utilizando cualquier criterio que desee:
enum class Color(val hue: String) { RED("red"), YELLOW("yellow"), BLUE("blue"); companion object { fun forHue(hue: String) = values().find{ it.hue == hue } } } Una llamada a Color.forHue("red") devuelve la instancia de Color.RED como se esperaba.
(Este es probablemente el enfoque más simple, pero no el más eficiente; vea respuestas como esta ).
No, pero puede escribir su propio método y obtener el valor por iteración, when o mapa.
Además, no puede anular valueOf .
Puede implementar su propio valueOf , que funciona sin distinción entre mayúsculas y minúsculas:
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()) } }