在官方文档中,我找到了 enumValues()
函数。
我使用了 enumValues()
函数,但找不到差异。
enum class RGB {
RED, GREEN, BLUE
}
RGB.values().joinToString { it.name } // RED, GREEN, BLUE
enumValues<RGB>().joinToString { it.name } // RED, GREEN, BLUE
enumValues()
和Enum.values()
之间有什么区别?
它是JVM以外的平台的功能吗?还是还有其他用例?
values()
的问题是它仅存在于每个混凝土枚举类中,并且您无法在通用枚举上称其为获得其值,在某些情况下这很有用。仅以String
中的所有值访问所有值的最简单示例,enumValues
让您写下这样的函数:
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()
}
可以使用您定义的任何枚举类来调用:
getEnumValuesString<RGB>()