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

时间:2016-10-28 09:13:29

标签: enums kotlin kotlin-extension

如果我尝试输入:

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 }

编译器抱怨:

  

未解决的参考值

this.values()没有任何帮助

为什么我没有values()

1 个答案:

答案 0 :(得分:3)

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

Kotlin目前没有提供在类级别编写扩展函数的方法。

但是,您可以使用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)