枚举器上的扩展函数,`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)
如果我尝试输入:
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)