Intereting Posts
Свойства расширения Kotlin не работают в скрипте Kotlin Как отлаживать последовательности / коллекции Котлина Как передать имя db во время выполнения в kotlin Тест в Котлине не может получить доступ к защищенному методу Как заменить дублирующиеся пробелы в String в Kotlin? Kotlin kovenant succesUi на неправильной нитке? «Ошибка: не удалось найти или загрузить основной« ИЛИ »класс не найден» – с помощью андроидного модуля (Gradle / IntelliJ) Как сохранить логотип над рушащейся панелью инструментов Ошибка компилятора Java при связывании с бандой компилятора kotlin с использованием ant Как использовать тип перечисления Postgresql через Kotlin Exposed ORM? Как загрузить фрагмент в BottomNavigationView в зависимости от выбранного элемента? Вызовите супер в конструкторе и назначьте поле в Котлине? Может ли поле быть перенесено в не нулевую версию? Если дети RecyclerView соответствуют высоте родителя при использовании конструктора вместо надувания, чтобы создать их Вызов RxJava Single In Kotlin Lambda

Функция расширения в перечислителе, `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() ?

fun EGraphicsAPIConvention.of(i: Int) добавляет метод расширения ко всем экземплярам EGraphicsAPIConvention чтобы вы могли написать EGraphicsAPIConvention. API_DirectX.of(1) 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)