English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Основное использование класса-енумерации - это реализация тип安全教育ной энумерации.
Константы энумерации отделяются запятыми, каждая константа энумерации является объектом.
enum class Color{ RED, BLACK, BLUE, GREEN, WHITE {}
Каждый элемент-енумерация является примером класса-енумерации и может быть инициализирован:
enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF) {}
По умолчанию имя равно имени константы-енумерации, значение начинается с 0. Если необходимо specify значение, можно использовать его конструктор:
enum class Shape(value: Int) { ovel(100), rectangle(200) {}
Enum также поддерживает определение своих анонимных классов и соответствующих методов, а также переопределение методов базового класса. Например:
enum class ProtocolState { WAITING { override fun signal() = TALKING }, TALKING { override fun signal() = WAITING ; abstract fun signal(): ProtocolState {}
Если класс-енумерация определяет любые члены, то константы枚руп в определении членов должны быть разделены точкой с запятой
В Kotlin классы-енумерации имеют составные методы, которые позволяют перебирать определенные константы枚руп и получать их по имени.
EnumClass.valueOf(value: String): EnumClass // Преобразует заданное name в значение枚руп, если не найдено соответствие, выбрасывает IllegalArgumentException EnumClass.values(): Array<EnumClass> // Возвращает значения枚руп в виде массива
Получение информации о枚举:
val name: String // Получение названия枚举 val ordinal: Int // Получение顺序枚举值 в всех枚рупных массивах
enum class Color{ RED, BLACK, BLUE, GREEN, WHITE {} fun main(args: Array<String>) { var color: Color = Color.BLUE println(Color.values()) println(Color.valueOf("RED")) println(color.name) println(color.ordinal) {}
С Kotlin 1.1 можно использовать enumValues<T>()
и enumValueOf<T>()
Функция доступна в генерической форме к константам класса-перечисления
:
enum class RGB { RED, GREEN, BLUE } inline fun <reified T : Enum<T>> printAllValues() { print(enumValues<T>().joinToString { it.name }) {} fun main(args: Array<String>) { printAllValues<RGB>() // Вывод RED, GREEN, BLUE {}