Middle
Какви са характеристиките на работата с класове Enum в Kotlin?
sobes.tech AI
Отговор от AI
Класът enum е специален тип клас, използван за представяне на набор от константи.
Характеристики:
- Дефиниране на константи: Всяка константа на enum е екземпляр на класа enum.
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 може да бъде обявена с анонимен клас, който предоставя свои реализации на методи или свойства.
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>(): Връща масив от всички константи на 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, позволявайки добавяне на свойства, методи и реализиране на интерфейси.