Middle
Хусусиятҳои кор бо синфҳои Enum дар Kotlin чистанд?
sobes.tech AI
Ҷавоб аз AI
Класи енуми — это тип особой класса, используемый для представления набора констант.
Особенности:
- Определение констант: Каждая константа перечисления является экземпляром класса перечисления.
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, дозволяючи додавати властивості, методи та реалізовувати інтерфейси.