Разница между Enum.values ​​() и enumValues ​​() в котлине - PullRequest
0 голосов
/ 05 марта 2019

В официальном документе я обнаружил функцию enumValues().

Я использовал функцию enumValues(), но не могу найти разницу.

enum class RGB {
    RED, GREEN, BLUE
}

RGB.values().joinToString { it.name } // RED, GREEN, BLUE
enumValues<RGB>().joinToString { it.name } // RED, GREEN, BLUE

Чторазница между enumValues() и Enum.values()?

Это функция для платформ, отличных от JVM?Или есть другие варианты использования?

1 Ответ

0 голосов
/ 05 марта 2019

Проблема с values() состоит в том, что он существует только в каждом конкретном классе перечисления, и вы не можете вызвать его для универсального перечисления, чтобы получить его значения, что довольно полезно в некоторых случаях.Взяв простейший пример желания получить доступ ко всем значениям в String, enumValues позволяет написать функцию, подобную этой:

inline fun <reified T: Enum<T>> getEnumValuesString(): String {
    // could call RGB.values(), but not T.values()
    // even with the generic constraint and reified generics

    // this works, however
    return enumValues<T>().joinToString()
}

, которую затем можно вызывать с любым определенным вами классом перечисления:

getEnumValuesString<RGB>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...