Middle
Aké sú vlastnosti práce s triedami Enum v Kotlin?
sobes.tech AI
Odpoveď od AI
Enum trieda je špeciálny typ triedy, ktorý sa používa na reprezentáciu súboru konštánt.
Vlastnosti:
- Definícia konštánt: Každá konštanta výčtu je inštanciou triedy výčtu.
enum class Color { RED, GREEN, BLUE } - Vlastnosti a metódy: Triedy enum môžu mať vlastnosti a metódy. Každá konštanta ich môže implementovať odlišne.
enum class Status(val description: String) { SUCCESS("Operácia bola úspešná"), ERROR("Vyskytla sa chyba"), PENDING("Čaká") } enum class Direction { NORTH, SOUTH, EAST, WEST; fun getOpposite(): Direction { return when (this) { NORTH -> SOUTH SOUTH -> NORTH EAST -> WEST WEST -> EAST } } } - Anonymné triedy: Každá konštanta výčtu môže byť deklarovaná s anonymnou triedou, ktorá poskytuje vlastné implementácie metód alebo vlastností.
enum class State { IDLE { override fun signal() = READY }, READY { override fun signal() = IDLE }; // Bodkočiarka je povinná pred deklaráciou členov triedy abstract fun signal(): State } - Implementácia rozhraní: Trieda enum môže implementovať rozhrania.
interface Printable { fun printName() } enum class Shape : Printable { CIRCLE { override fun printName() { println("Kruh") } }, SQUARE { override fun printName() { println("Štvorec") } } } - Vložené vlastnosti: Každá konštanta má vložené vlastnosti
name(názov konštanty ako reťazec) aordinal(pozícia konštanty v deklarácii, začínajúc od 0).enum class Priority { LOW, MEDIUM, HIGH } fun main() { println(Priority.MEDIUM.name) // Výstup: MEDIUM println(Priority.HIGH.ordinal) // Výstup: 2 } - Vložené funkcie:
enumValues<T>(): Vráti pole všetkých konštánt v enum.enumValueOf<T>(name: String): Vráti konštantu enum s daným názvom. VyhadzujeIllegalArgumentException, ak nie je nájdená.
fun main() { val allPriorities = enumValues<Priority>() println(allPriorities.joinToString()) // Výstup: LOW, MEDIUM, HIGH val highPriority = enumValueOf<Priority>("HIGH") println(highPriority) // Výstup: HIGH } - Použitie v
whenvýrazoch: Ideálne na použitie vwhen. Kompilátor upozorní, ak nie sú pokryté všetky vetvy (keď sa používa ako výraz s návratovou hodnotou).fun processStatus(status: Status) { when (status) { Status.SUCCESS -> println("Úspešne") Status.ERROR -> println("Chyba") Status.PENDING -> println("Čaká") } }
Enum v Kotlin je mocnejší v porovnaní s ich ekvivalentmi v Jave, umožňujúc pridávať vlastnosti, metódy a implementovať rozhrania.