Sobes.tech
Middle

Milyen jellemzői vannak az Enum osztályokkal való munkának Kotlinban?

sobes.tech MI

Válasz az MI-től

Az enum osztály egy speciális típusú osztály, amelyet állandó értékek halmazának ábrázolására használnak.

Jellemzők:

  • Állandók meghatározása: Minden enum állandó egy példánya az enum osztálynak.
    enum class Color {
        RED, GREEN, BLUE
    }
    
  • Tulajdonságok és metódusok: Az enum osztályoknak lehetnek tulajdonságaik és metódusaik. Minden állandó másképp valósíthatja meg őket.
    enum class Status(val description: String) {
        SUCCESS("Sikeres művelet"),
        ERROR("Hiba történt"),
        PENDING("Várakozás")
    }
    
    enum class Direction {
        NORTH, SOUTH, EAST, WEST;
    
        fun getOpposite(): Direction {
            return when (this) {
                NORTH -> SOUTH
                SOUTH -> NORTH
                EAST -> WEST
                WEST -> EAST
            }
        }
    }
    
  • Névtelen osztályok: Minden enum állandó deklarálható névtelen osztállyal, amely saját metódusokat vagy tulajdonságokat valósít meg.
    enum class State {
        IDLE {
            override fun signal() = READY
        },
        READY {
            override fun signal() = IDLE
        }; // A pontosvessző kötelező az osztálytagok előtt
    
        abstract fun signal(): State
    }
    
  • Interfészek megvalósítása: Az enum osztály megvalósíthat interfészeket.
    interface Printable {
        fun printName()
    }
    
    enum class Shape : Printable {
        CIRCLE {
            override fun printName() {
                println("Kör")
            }
        },
        SQUARE {
            override fun printName() {
                println("Négyzet")
            }
        }
    }
    
  • Beépített tulajdonságok: Minden állandónak beépített tulajdonságai vannak: name (az állandó neve sztringként) és ordinal (az állandó pozíciója a deklarációban, 0-tól kezdődően).
    enum class Priority {
        LOW, MEDIUM, HIGH
    }
    
    fun main() {
        println(Priority.MEDIUM.name)    // Kimenet: MEDIUM
        println(Priority.HIGH.ordinal) // Kimenet: 2
    }
    
  • Beépített függvények:
    • enumValues<T>(): Visszaadja az összes enum állandót tartalmazó Array-t.
    • enumValueOf<T>(name: String): Visszaadja a megadott névvel rendelkező enum állandót. IllegalArgumentException-t dob, ha nem található.
    fun main() {
        val allPriorities = enumValues<Priority>()
        println(allPriorities.joinToString()) // Kimenet: LOW, MEDIUM, HIGH
    
        val highPriority = enumValueOf<Priority>("HIGH")
        println(highPriority) // Kimenet: HIGH
    }
    
  • Használat when kifejezésekben: Ideális when-ben való használatra. A fordító figyelmeztet, ha nem minden ág van lefedve (ha értékadásként használják visszatérési értékkel).
    fun processStatus(status: Status) {
        when (status) {
            Status.SUCCESS -> println("Sikeres")
            Status.ERROR -> println("Hiba")
            Status.PENDING -> println("Várakozás")
        }
    }
    

A Kotlin enumjai erősebbek, mint Java megfelelőik, lehetővé téve tulajdonságok, metódusok hozzáadását és interfészek megvalósítását.