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) iordinal(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. BacaIllegalArgumentExceptionako 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
whenizrazima: Idealno za korišćenje uwhen. 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.