Sobes.tech
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, дозволяючи додавати властивості, методи та реалізовувати інтерфейси.