Función de extensión en el enumerador, `values ​​()` no disponible?

Si bash escribir:

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 } 

El comstackdor se queja:

valores de reference no resueltos

this.values() no ayuda tampoco

¿Por qué no tengo values() disponibles?

La fun EGraphicsAPIConvention.of(i: Int) está agregando un método de extensión a todas EGraphicsAPIConvention instancias de EGraphicsAPIConvention para que pueda escribir EGraphicsAPIConvention. API_DirectX.of(1) EGraphicsAPIConvention. API_DirectX.of(1) .

Kotlin actualmente no proporciona una forma de escribir una function de extensión a nivel de class.

Sin embargo, puede hacer uso del companion object para get el comportamiento deseado de la siguiente manera:

 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 } } } 

Y luego EGraphicsAPIConvention.of(0) : EGraphicsAPIConvention.of(0)

  • ¿Convertir mi proyecto de estudio andorid existente a kotlin?
  • Función de extensión booleana
  • Cómo corregir la firma del método de extensión genérico en kotlin para resolver "Falló la inferencia de tipo" en kotlin
  • Kotlin: ¿funciones de extensión y types de plataforma?
  • Complemento de estudio Android con id: 'kotlin-android-extensions'
  • Cómo mantener el tipo de object para el casting inteligente al devolver cualquier
  • ¿Funciones de extensión Kotlin contra funciones miembro?
  • While loop en el lenguaje de progtwigción Kotlin
  • El resultado es el mismo, pero el caso de testing no pasa en la testing unitaria
  • ¿Cómo verificar la class "instanceof" en kotlin?
  • ¿Se debe evitar nombrar una function igual que una class existente en Kotlin? ¿Por qué?