kotlin - kotlin 中 Enum.values() 和 enumValues() 的区别

标签 kotlin enums

official document , 我找到了 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>()

关于kotlin - kotlin 中 Enum.values() 和 enumValues() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54998238/

相关文章:

android - RxJava toList() 不触发 subscribe() 方法(使用 Room)

f# - 在有区别的联合上匹配

c - 将几个标志和小枚举作为函数参数传递 : hand-made int bitmasks or small struct?

java - 在java中迭代EnumMap有什么更好的方法?

android - 无法使用导入到 AndroidKeyStore RSA 私钥进行签名

c# - LINQ 相对于函数式方法链的优势

gradle - 从本地的jar文件中找不到cordapp

java - 没有Maven Central的Kotlin和Gradle?

c# - 在没有 try block 的情况下将枚举从对象转换为 long?

c# - C++/CX 组件 "public enum class"在 C# Metro App 中没有正确链接