En el documento oficial , encontré la función enumValues() .
Usé la función enumValues() , pero no puedo encontrar la diferencia.
enum class RGB { RED, GREEN, BLUE } RGB.values().joinToString { it.name } // RED, GREEN, BLUE enumValues<RGB>().joinToString { it.name } // RED, GREEN, BLUE ¿Qué diferencia hay entre enumValues() y Enum.values() ?
¿Es una función para plataformas distintas de JVM? ¿O hay otros casos de uso?
El problema con values() es que solo existe en cada clase de enumeración concreta, y no puede llamarlo en una enumeración genérica para obtener sus valores, lo cual es bastante útil en algunos casos. Tomando solo el ejemplo más simple de querer acceder a todos los valores en un String , enumValues le permite escribir una función como esta:
inline fun <reified T: Enum<T>> getEnumValuesString(): String { // could call RGB.values(), but not T.values() // even with the generic constraint and reified generics // this works, however return enumValues<T>().joinToString() }Que luego se puede llamar con cualquier clase de enumeración que haya definido:
getEnumValuesString<RGB>()