Estoy esperando algún valor de cadena y necesito encontrar, si tengo definido el valor de enumeración correspondiente.
mi valor de enumeración es
enum class Status { Created, Updated }y lo que quiero lograr en esta función es verificar si alguno de estos valores enumerados coincide, ignorar el caso
private fun getStatus( value: String ): Status { .... }si nada coincide, entonces quiero arrojar un error.
desde ya muchas gracias por tu ayuda!!
Nota : en esta respuesta, me perdí el requisito de que la función no distinga entre mayúsculas y minúsculas. Esas funciones integradas solo encuentran coincidencias exactas.
Respuesta original:
Hay una función valueOf() incorporada que puede usar y que hace exactamente eso:
val status = Status.valueOf("Created") Si está en un contexto genérico y no puede usar el nombre de la clase enum directamente, también puede usar enumValueOf() :
val status = enumValueOf<Status>("Created")Aquí está el documento sobre esto: https://kotlinlang.org/docs/enum-classes.html#working-with-enum-constants
Las funciones integradas para enumeraciones como Enum.valueOf o enumValueOf<Enum> distinguen entre mayúsculas y minúsculas, pero puede escribir fácilmente sus propias versiones que no distinguen entre mayúsculas y minúsculas:
inline fun <reified T : Enum<T>> enumValueOfIgnoreCase(key: String): T = enumValues<T>().find { it.name.equals(key, ignoreCase = true) } ?: throw IllegalArgumentException("no value for key $key") Luego, puede escribir, por ejemplo, lo siguiente para obtener el elemento Status Created :
val status = enumValueOfIgnoreCase<Status>("created")