Sobes.tech
Middle

Care sunt caracteristicile lucrului cu clasele Enum în Kotlin?

sobes.tech AI

Răspuns de la AI

Clasa enum este un tip special de clasă utilizat pentru a reprezenta un set de constante.

Caracteristici:

  • Definirea constantelor: Fiecare constantă a enumerării este o instanță a clasei de enumerare.
    enum class Color {
        RED, GREEN, BLUE
    }
    
  • Proprietăți și metode: Clasele enum pot avea proprietăți și metode. Fiecare constantă le poate implementa diferit.
    enum class Status(val description: String) {
        SUCCESS("Operație reușită"),
        ERROR("A apărut o eroare"),
        PENDING("Așteaptă")
    }
    
    enum class Direction {
        NORTH, SOUTH, EAST, WEST;
    
        fun getOpposite(): Direction {
            return when (this) {
                NORTH -> SOUTH
                SOUTH -> NORTH
                EAST -> WEST
                WEST -> EAST
            }
        }
    }
    
  • Clase anonime: Fiecare constantă de enumerare poate fi declarată cu o clasă anonimă care oferă propriile implementări ale metodelor sau proprietăților.
    enum class State {
        IDLE {
            override fun signal() = READY
        },
        READY {
            override fun signal() = IDLE
        }; // Punct și virgulă obligatoriu înainte de a declara membrii clasei
    
        abstract fun signal(): State
    }
    
  • Implementarea interfețelor: Clasa enum poate implementa interfețe.
    interface Printable {
        fun printName()
    }
    
    enum class Shape : Printable {
        CIRCLE {
            override fun printName() {
                println("Cerc")
            }
        },
        SQUARE {
            override fun printName() {
                println("Dreptunghi")
            }
        }
    }
    
  • Proprietăți încorporate: Fiecare constantă are proprietăți încorporate name (numele constantei ca șir de caractere) și ordinal (poziția constantei în declarație, începând de la 0).
    enum class Priority {
        LOW, MEDIUM, HIGH
    }
    
    fun main() {
        println(Priority.MEDIUM.name)    // Afișează: MEDIUM
        println(Priority.HIGH.ordinal) // Afișează: 2
    }
    
  • Funcții încorporate:
    • enumValues<T>(): Returnează un array cu toate constantele din clasa enum.
    • enumValueOf<T>(name: String): Returnează constanta enum cu numele dat. Aruncă IllegalArgumentException dacă nu se găsește constanta.
    fun main() {
        val allPriorities = enumValues<Priority>()
        println(allPriorities.joinToString()) // Afișează: LOW, MEDIUM, HIGH
    
        val highPriority = enumValueOf<Priority>("HIGH")
        println(highPriority) // Afișează: HIGH
    }
    
  • Utilizarea în expresii when: Sunt ideale pentru utilizare în when. Compilatorul va avertiza dacă nu toate ramurile sunt acoperite (atunci când sunt utilizate ca expresie cu valoare de returnare).
    fun processStatus(status: Status) {
        when (status) {
            Status.SUCCESS -> println("Succes")
            Status.ERROR -> println("Eroare")
            Status.PENDING -> println("Așteaptă")
        }
    }
    

Enum-urile în Kotlin sunt mai puternice comparativ cu cele din Java, permițând adăugarea de proprietăți, metode și implementarea de interfețe.