Sobes.tech
Middle

Millised on Enum klassidega töötamise omadused Kotlinis?

sobes.tech AI

Vastus AI-lt

Enum klass on spetsiaalne klassi tüüp, mida kasutatakse konstantide kogumi esitamiseks.

Omadused:

  • Konstantide määratlemine: Iga enum-konstant on enum-klassi eksemplar.
    enum class Color {
        RED, GREEN, BLUE
    }
    
  • Omadused ja meetodid: Enum-klassi võib omada omadusi ja meetodeid. Iga konstant võib neid erinevalt rakendada.
    enum class Status(val description: String) {
        SUCCESS("Operatsioon õnnestus"),
        ERROR("Tekkis viga"),
        PENDING("Ootamine")
    }
    
    enum class Direction {
        NORTH, SOUTH, EAST, WEST;
    
        fun getOpposite(): Direction {
            return when (this) {
                NORTH -> SOUTH
                SOUTH -> NORTH
                EAST -> WEST
                WEST -> EAST
            }
        }
    }
    
  • Anonüümklassid: Iga enum-konstant võib olla defineeritud anonüümklassi abil, mis pakub oma meetodite või omaduste rakendusi.
    enum class State {
        IDLE {
            override fun signal() = READY
        },
        READY {
            override fun signal() = IDLE
        }; // Punkt ja koma on kohustuslik enne klassi liikmete deklaratsioone
    
        abstract fun signal(): State
    }
    
  • Interfeiside rakendamine: Enum-klassi saab rakendada interfeise.
    interface Printable {
        fun printName()
    }
    
    enum class Shape : Printable {
        CIRCLE {
            override fun printName() {
                println("Ring")
            }
        },
        SQUARE {
            override fun printName() {
                println("Ruut")
            }
        }
    }
    
  • Sisseehitatud omadused: Igal konstantil on sisseehitatud omadused name (konstantide nimi stringina) ja ordinal (konstantide positsioon deklaratsioonis, alates 0).
    enum class Priority {
        LOW, MEDIUM, HIGH
    }
    
    fun main() {
        println(Priority.MEDIUM.name)    // Väljund: MEDIUM
        println(Priority.HIGH.ordinal) // Väljund: 2
    }
    
  • Sisseehitatud funktsioonid:
    • enumValues<T>(): Tagastab massiivi kõigist enum-konstantidest.
    • enumValueOf<T>(name: String): Tagastab enum-konstanti nime järgi. Viskab IllegalArgumentException, kui konstant ei leidu.
    fun main() {
        val allPriorities = enumValues<Priority>()
        println(allPriorities.joinToString()) // Väljund: LOW, MEDIUM, HIGH
    
        val highPriority = enumValueOf<Priority>("HIGH")
        println(highPriority) // Väljund: HIGH
    }
    
  • Kasutamine when väljendites: Ideaalne kasutamiseks when. Kompilatsioonirakendus hoiatab, kui kõik juhtumid pole kaetud (kasutades väljendina koos tagastusega).
    fun processStatus(status: Status) {
        when (status) {
            Status.SUCCESS -> println("Õnnestus")
            Status.ERROR -> println("Viga")
            Status.PENDING -> println("Ootamine")
        }
    }
    

Kotlin enumid on võimsamad kui nende Java ekvivalendid, võimaldades lisada omadusi, meetodeid ja rakendada interfeise.