Sobes.tech
Middle

Koje su osobine rada sa Enum klasama u Kotlinu?

sobes.tech АИ

Одговор од АИ

Enum klasa — to je poseban tip klase koji se koristi za predstavljanje skupa konstanti.

Karakteristike:

  • Definisanje konstanti: Svaka konstanta u enumu je primer klase enum.
    enum class Color {
        RED, GREEN, BLUE
    }
    
  • Svojstva i metode: Enum klase mogu imati svojstva i metode. Svaka konstanta može da ih implementira na različite načine.
    enum class Status(val description: String) {
        SUCCESS("Operacija uspešno izvršena"),
        ERROR("Došlo je do greške"),
        PENDING("Čekanje")
    }
    
    enum class Direction {
        NORTH, SOUTH, EAST, WEST;
    
        fun getOpposite(): Direction {
            return when (this) {
                NORTH -> SOUTH
                SOUTH -> NORTH
                EAST -> WEST
                WEST -> EAST
            }
        }
    }
    
  • Anonimne klase: Svaka konstanta enum može biti deklarisana sa anonimnom klasom koja pruža svoje implementacije metoda ili svojstava.
    enum class State {
        IDLE {
            override fun signal() = READY
        },
        READY {
            override fun signal() = IDLE
        }; // Tačka i zarez su obavezni pre deklaracije članova klase
    
        abstract fun signal(): State
    }
    
  • Implementacija interfejsa: Enum klasa može implementirati interfejse.
    interface Printable {
        fun printName()
    }
    
    enum class Shape : Printable {
        CIRCLE {
            override fun printName() {
                println("Krug")
            }
        },
        SQUARE {
            override fun printName() {
                println("Kvadrat")
            }
        }
    }
    
  • Ugrađena svojstva: Svaka konstanta ima ugrađena svojstva name (ime konstante kao string) i ordinal (pozicija konstante u deklaraciji, počinje od 0).
    enum class Priority {
        LOW, MEDIUM, HIGH
    }
    
    fun main() {
        println(Priority.MEDIUM.name)    // Izlaz: MEDIUM
        println(Priority.HIGH.ordinal) // Izlaz: 2
    }
    
  • Ugrađene funkcije:
    • enumValues<T>(): Vraća niz svih konstanti u enumu.
    • enumValueOf<T>(name: String): Vraća konstantu enuma sa zadanim imenom. Baca IllegalArgumentException ako nije pronađena.
    fun main() {
        val allPriorities = enumValues<Priority>()
        println(allPriorities.joinToString()) // Izlaz: LOW, MEDIUM, HIGH
    
        val highPriority = enumValueOf<Priority>("HIGH")
        println(highPriority) // Izlaz: HIGH
    }
    
  • Korišćenje u when izrazima: Idealno za korišćenje u when. Kompajler će upozoriti ako nisu pokrivene sve grane (kada se koristi kao izraz sa vraćanjem vrednosti).
    fun processStatus(status: Status) {
        when (status) {
            Status.SUCCESS -> println("Uspešno")
            Status.ERROR -> println("Greška")
            Status.PENDING -> println("Čekanje")
        }
    }
    

Enum u Kotlinu su moćniji u poređenju sa njihovim analogima u Javi, omogućavajući dodavanje svojstava, metoda i implementaciju interfejsa.