Назад к вопросам
Middle
233
questionbank

Какие особенности работы с классами Enum в Kotlin?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Enum class — это особый тип класса, используемый для представления набора констант.

Особенности:

  • Определение констант: Каждая константа перечисления является экземпляром класса перечисления.
    enum class Color {
        RED, GREEN, BLUE
    }
    
  • Свойства и методы: Enum-классы могут иметь свойства и методы. Каждая константа может реализовывать их по-разному.
    enum class Status(val description: String) {
        SUCCESS("Операция выполнена успешно"),
        ERROR("Произошла ошибка"),
        PENDING("Ожидание")
    }
    
    enum class Direction {
        NORTH, SOUTH, EAST, WEST;
    
        fun getOpposite(): Direction {
            return when (this) {
                NORTH -> SOUTH
                SOUTH -> NORTH
                EAST -> WEST
                WEST -> EAST
            }
        }
    }
    
  • Анонимные классы: Каждую константу перечисления можно объявить с анонимным классом, предоставляющим свои реализации методов или свойств.
    enum class State {
        IDLE {
            override fun signal() = READY
        },
        READY {
            override fun signal() = IDLE
        }; // Точка с запятой обязательна перед объявлением членов класса
    
        abstract fun signal(): State
    }
    
  • Реализация интерфейсов: Enum-класс может реализовывать интерфейсы.
    interface Printable {
        fun printName()
    }
    
    enum class Shape : Printable {
        CIRCLE {
            override fun printName() {
                println("Круг")
            }
        },
        SQUARE {
            override fun printName() {
                println("Квадрат")
            }
        }
    }
    
  • Встроенные свойства: Каждая константа имеет встроенные свойства name (имя константы как строка) и ordinal (позиция константы в объявлении, начиная с 0).
    enum class Priority {
        LOW, MEDIUM, HIGH
    }
    
    fun main() {
        println(Priority.MEDIUM.name)    // Вывод: MEDIUM
        println(Priority.HIGH.ordinal) // Вывод: 2
    }
    
  • Встроенные функции:
    • enumValues<T>(): Возвращает Array всех констант в Enum-классе.
    • enumValueOf<T>(name: String): Возвращает константу Enum-класса с заданным именем. Бросает IllegalArgumentException, если константа не найдена.
    fun main() {
        val allPriorities = enumValues<Priority>()
        println(allPriorities.joinToString()) // Вывод: LOW, MEDIUM, HIGH
    
        val highPriority = enumValueOf<Priority>("HIGH")
        println(highPriority) // Вывод: HIGH
    }
    
  • Использование в when выражениях: Идеально подходят для использования в when. Компилятор предупредит, если не все ветки покрыты (при использовании в качестве выражения с возвращаемым значением).
    fun processStatus(status: Status) {
        when (status) {
            Status.SUCCESS -> println("Успешно")
            Status.ERROR -> println("Ошибка")
            Status.PENDING -> println("Ожидание")
        }
    }
    

Enum в Kotlin являются более мощными по сравнению с их аналогами в Java, позволяя добавлять свойства, методы и реализовывать интерфейсы.