Saltar al contenido

Enum.valueOf en Kotlin

Solución:

Su función funciona si especifica el valor del parámetro de tipo explícitamente:

val value = safeValueOf<TestEnum>("test")

Se supone que el código original también funciona, pero no funciona debido a un error en la implementación de la inferencia de tipos: https://youtrack.jetbrains.com/issue/KT-11218

Solución a prueba de choques

Crea una extensión y luego llama valueOf<MyEnum>("value"). Si el tipo no es válido, obtendrá nulo y tendrá que manejarlo

inline fun <reified T : Enum<T>> valueOf(type: String): T? {
    return try {
        java.lang.Enum.valueOf(T::class.java, type)
    } catch (e: IllegalArgumentException) {
        null
    }
}

Alternativamente, puede establecer un valor predeterminado, llamando valueOf<MyEnum>("value", MyEnum.FALLBACK)y evitar una respuesta nula. Puede extender su enumeración específica para que el valor predeterminado sea automático

inline fun <reified T : Enum<T>> valueOf(type: String, default: T): T {
    return try {
        java.lang.Enum.valueOf(T::class.java, type)
    } catch (e: IllegalArgumentException) {
        default
    }
}

O si quieres ambos, haz el segundo:

inline fun <reified T : Enum<T>> valueOf(type: String, default: T): T = valueOf<T>(type) ?: default

Desde Kotlin 1.1, es posible acceder a las constantes en una clase enum de forma genérica, usando las funciones enumValues ​​() y enumValueOf ():

enum class RGB { RED, GREEN, BLUE }

inline fun <reified T : Enum<T>> printAllValues() {
    print(enumValues<T>().joinToString { it.name })
}

printAllValues<RGB>() // prints RED, GREEN, BLUE

https://kotlinlang.org/docs/reference/enum-classes.html#working-with-enum-constants

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *