【问题标题】:Difference between Enum.values() and enumValues() in kotlinkotlin 中 Enum.values() 和 enumValues() 的区别
【发布时间】:2019-03-05 16:27:23
【问题描述】:

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 以外平台的功能吗?还是有其他用例?

【问题讨论】:

  • 在您提到的同一文档中,指定从 Kotlin 1.1 开始,可以使用 enumValues&lt;T&gt;()enumValueOf&lt;T&gt;() 函数以通用方式访问枚举类中的常量。 EnumClass.values() 仍在使用,具有相同的操作含义,请阅读上面的enumValues()

标签: kotlin enums


【解决方案1】:

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>()

【讨论】:

    猜你喜欢
    • 2020-04-09
    • 2019-12-06
    • 1970-01-01
    • 2021-01-05
    • 2021-01-02
    • 2019-04-24
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多