Sobes.tech
Middle

Aké sú vlastnosti práce s triedami Enum v Kotlin?

sobes.tech AI

Odpoveď od AI

Enum trieda je špeciálny typ triedy, ktorý sa používa na reprezentáciu súboru konštánt.

Vlastnosti:

  • Definícia konštánt: Každá konštanta výčtu je inštanciou triedy výčtu.
    enum class Color {
        RED, GREEN, BLUE
    }
    
  • Vlastnosti a metódy: Triedy enum môžu mať vlastnosti a metódy. Každá konštanta ich môže implementovať odlišne.
    enum class Status(val description: String) {
        SUCCESS("Operácia bola úspešná"),
        ERROR("Vyskytla sa chyba"),
        PENDING("Čaká")
    }
    
    enum class Direction {
        NORTH, SOUTH, EAST, WEST;
    
        fun getOpposite(): Direction {
            return when (this) {
                NORTH -> SOUTH
                SOUTH -> NORTH
                EAST -> WEST
                WEST -> EAST
            }
        }
    }
    
  • Anonymné triedy: Každá konštanta výčtu môže byť deklarovaná s anonymnou triedou, ktorá poskytuje vlastné implementácie metód alebo vlastností.
    enum class State {
        IDLE {
            override fun signal() = READY
        },
        READY {
            override fun signal() = IDLE
        }; // Bodkočiarka je povinná pred deklaráciou členov triedy
    
        abstract fun signal(): State
    }
    
  • Implementácia rozhraní: Trieda enum môže implementovať rozhrania.
    interface Printable {
        fun printName()
    }
    
    enum class Shape : Printable {
        CIRCLE {
            override fun printName() {
                println("Kruh")
            }
        },
        SQUARE {
            override fun printName() {
                println("Štvorec")
            }
        }
    }
    
  • Vložené vlastnosti: Každá konštanta má vložené vlastnosti name (názov konštanty ako reťazec) a ordinal (pozícia konštanty v deklarácii, začínajúc od 0).
    enum class Priority {
        LOW, MEDIUM, HIGH
    }
    
    fun main() {
        println(Priority.MEDIUM.name)    // Výstup: MEDIUM
        println(Priority.HIGH.ordinal) // Výstup: 2
    }
    
  • Vložené funkcie:
    • enumValues<T>(): Vráti pole všetkých konštánt v enum.
    • enumValueOf<T>(name: String): Vráti konštantu enum s daným názvom. Vyhadzuje IllegalArgumentException, ak nie je nájdená.
    fun main() {
        val allPriorities = enumValues<Priority>()
        println(allPriorities.joinToString()) // Výstup: LOW, MEDIUM, HIGH
    
        val highPriority = enumValueOf<Priority>("HIGH")
        println(highPriority) // Výstup: HIGH
    }
    
  • Použitie v when výrazoch: Ideálne na použitie v when. Kompilátor upozorní, ak nie sú pokryté všetky vetvy (keď sa používa ako výraz s návratovou hodnotou).
    fun processStatus(status: Status) {
        when (status) {
            Status.SUCCESS -> println("Úspešne")
            Status.ERROR -> println("Chyba")
            Status.PENDING -> println("Čaká")
        }
    }
    

Enum v Kotlin je mocnejší v porovnaní s ich ekvivalentmi v Jave, umožňujúc pridávať vlastnosti, metódy a implementovať rozhrania.