Kotlin中Enum.values()和enumValues()之间的区别

gal*_*rio 5 enums kotlin

正式文件中,我找到了enumValues()功能。

我使用过enumValues()函数,但是我找不到区别。

enum class RGB {
    RED, GREEN, BLUE
}

RGB.values().joinToString { it.name } // RED, GREEN, BLUE
enumValues<RGB>().joinToString { it.name } // RED, GREEN, BLUE
Run Code Online (Sandbox Code Playgroud)

enumValues()和之间有什么区别Enum.values()

它是否适用于JVM以外的平台?还是还有其他用例?

zsm*_*b13 9

问题values()在于它仅存在于每个具体的枚举类中,并且您不能在通用枚举上调用它来获取其值,这在某些情况下非常有用。仅以最简单的示例为例,它想访问a中的所有值StringenumValues让您编写如下函数:

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()
}
Run Code Online (Sandbox Code Playgroud)

然后可以使用您定义的任何枚举类来调用该类:

getEnumValuesString<RGB>()
Run Code Online (Sandbox Code Playgroud)