枚举器上的扩展函数,`values()` 不可用?

Extension function on enumerator, `values()` unavailable?

如果我尝试输入:

enum class EGraphicsAPIConvention(@get:JvmName("i") val i: Int) {    
   API_DirectX(0),    
   API_OpenGL(1)    
}

fun EGraphicsAPIConvention.of(i: Int) = values().first { it.i == i }

编译器抱怨:

unresolved reference values

this.values() 也无济于事

为什么我没有 values() 可用?

fun EGraphicsAPIConvention.of(i: Int) 正在将 an extension method 添加到所有 EGraphicsAPIConvention 个实例,以便您可以编写 EGraphicsAPIConvention. API_DirectX.of(1)

Kotlin 目前不提供在 class 级别编写扩展函数的方法。

但是您可以使用 companion object 来获得所需的行为,如下所示:

enum class EGraphicsAPIConvention(@get:JvmName("i") val i: Int) {
    API_DirectX(0),
    API_OpenGL(1);

    companion object {
        fun of(i: Int) = values().first { it.i == i }
    }
}

然后使用它:EGraphicsAPIConvention.of(0)