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