2016-10-28 79 views
1

如果我尝试键入:枚举器的扩展函数,`values()`不可用?

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()有货吗?

+0

使用'EGraphicsAPIConvention.values()'? – Lovis

回答

3

fun EGraphicsAPIConvention.of(i: Int)正在将an extension method添加到所有EGraphicsAPIConvention实例,以便您可以编写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)

+0

对,谢谢,8米以前我无法接受 – elect