Назад к вопросам
Middle
230
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, позволяя добавлять свойства, методы и реализовывать интерфейсы.