English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Kotlin基础教程

Kotlin流程控制

Функции в Kotlin

Строки в Kotlin

Kotlin面向对象(OOP)

Классы-перечисления

Основное использование класса-енумерации - это реализация тип安全教育ной энумерации.

Константы энумерации отделяются запятыми, каждая константа энумерации является объектом.

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