Sobes.tech
Middle

Kokios yra darbo su Enum klasėmis Kotlin?

sobes.tech AI

Atsakymas iš AI

Enum klasė yra ypatingo tipo klasė, naudojama konstantų rinkinio atvaizdavimui.

Ypatybės:

  • Konstantų apibrėžimas: Kiekviena enum konstantė yra enum klasės egzempliorius.
    enum class Color {
        RED, GREEN, BLUE
    }
    
  • Savybės ir metodai: Enum klasės gali turėti savybes ir metodus. Kiekviena konstantė gali juos įgyvendinti skirtingai.
    enum class Status(val description: String) {
        SUCCESS("Operacija sėkmingai atlikta"),
        ERROR("Įvyko klaida"),
        PENDING("Laukia")
    }
    
    enum class Direction {
        NORTH, SOUTH, EAST, WEST;
    
        fun getOpposite(): Direction {
            return when (this) {
                NORTH -> SOUTH
                SOUTH -> NORTH
                EAST -> WEST
                WEST -> EAST
            }
        }
    }
    
  • Anoniminės klasės: Kiekviena enum konstantė gali būti deklaruota su anonimine klase, kuri teikia savo metodų ar savybių įgyvendinimus.
    enum class State {
        IDLE {
            override fun signal() = READY
        },
        READY {
            override fun signal() = IDLE
        }; // Taškas ir kablelis yra privalomi prieš klasės narius
    
        abstract fun signal(): State
    }
    
  • Interfeisų įgyvendinimas: Enum klasė gali įgyvendinti interfeisus.
    interface Printable {
        fun printName()
    }
    
    enum class Shape : Printable {
        CIRCLE {
            override fun printName() {
                println("Apskritimas")
            }
        },
        SQUARE {
            override fun printName() {
                println("Kvadratas")
            }
        }
    }
    
  • Įmontuotos savybės: Kiekviena konstantė turi įmontuotas savybes name (konstantės pavadinimas kaip eilutė) ir ordinal (konstantės pozicija deklaracijoje, pradedant nuo 0).
    enum class Priority {
        LOW, MEDIUM, HIGH
    }
    
    fun main() {
        println(Priority.MEDIUM.name)    // Išvestis: MEDIUM
        println(Priority.HIGH.ordinal) // Išvestis: 2
    }
    
  • Įmontuotos funkcijos:
    • enumValues<T>(): Grąžina masyvą su visomis enum konstantomis.
    • enumValueOf<T>(name: String): Grąžina enum konstantą pagal pavadinimą. Meta IllegalArgumentException, jei nerandama.
    fun main() {
        val allPriorities = enumValues<Priority>()
        println(allPriorities.joinToString()) // Išvestis: LOW, MEDIUM, HIGH
    
        val highPriority = enumValueOf<Priority>("HIGH")
        println(highPriority) // Išvestis: HIGH
    }
    
  • Naudojimas when išraiškose: Idealiai tinka naudoti when. Kompiliatorius įspės, jei nėra padengtos visos šakos (naudojant kaip išraišką su grąžinama verte).
    fun processStatus(status: Status) {
        when (status) {
            Status.SUCCESS -> println("Sėkmingai")
            Status.ERROR -> println("Klaida")
            Status.PENDING -> println("Laukia")
        }
    }
    

Kotlin enum yra galingesni nei jų analogai Java, leidžiant pridėti savybes, metodus ir įgyvendinti interfeisus.