Дорогие читатели,
Помогите сделать документацию лучше!

К сожалению текст все еще содержит некоторое количество ошибок, и мы просим вас найти и исправить их. Если бы каждый из посетителей исправил хотя бы одну ошибку, то мы смогли бы довести до совершенства весь материал всего за один день.


Перечисляемые типы

Наиболее базовый пример использования enum — это реализация типобезопасных перечислений

enum class Direction {
    NORTH, SOUTH, WEST, EAST
}

Каждая enum-константа является объектом. При объявлении константы разделяются запятыми.

Инициализация

Так как константы являются экземплярами enum-класса, они могут быть инициализированы

enum class Color(val rgb: Int) {
        RED(0xFF0000),
        GREEN(0x00FF00),
        BLUE(0x0000FF)
}

Анонимные классы

Enum-константы также могут объявлять свои собственные анонимные классы

enum class ProtocolState {
    WAITING {
        override fun signal() = TALKING
    },

    TALKING {
        override fun signal() = WAITING
    };

    abstract fun signal(): ProtocolState
}

как с их собственными методами, так и с перегруженными методами базового класса. Следует заметить, что при объявлении в enum-классе каких-либо членов, необходимо отделять их от списка констант точкой с запятой, так же как и в Java.

Работа с enum-константами

Так же как и в Java, enum-классы в Kotlin имеют стандартные методы для вывода списка объявленных констант и для получения enum-константы по её имени. Ниже приведены сигнатуры этих методов:

EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>

Метод valueOf() выбрасывает исключение IllegalArgumentException, если указанное имя не соответствует ни одной константе, объявленной в классе.

Каждая enum-константа имеет поля, в которых содержатся её имя и порядковый номер в enum-классе:

val name: String
val ordinal: Int

Также enum-константы реализуют интерфейс Comparable. Порядок сортировки соответствует порядку объявления.