Middle
Jaké jsou vlastnosti práce s třídami Enum v Kotlinu?
sobes.tech AI
Odpověď od AI
Třída enum je speciální typ třídy používaný k reprezentaci sady konstant.
Vlastnosti:
- Definice konstant: Každá konstanta výčtu je instance výčtové třídy.
enum class Color { RED, GREEN, BLUE } - Vlastnosti a metody: Třídy enum mohou mít vlastnosti a metody. Každá konstanta je může implementovat odlišně.
enum class Status(val description: String) { SUCCESS("Operace byla úspěšná"), ERROR("Došlo k chybě"), PENDING("Čekání") } enum class Direction { NORTH, SOUTH, EAST, WEST; fun getOpposite(): Direction { return when (this) { NORTH -> SOUTH SOUTH -> NORTH EAST -> WEST WEST -> EAST } } } - Anonymní třídy: Každou konstantu výčtu lze deklarovat s anonymní třídou, která poskytuje vlastní implementace metod nebo vlastností.
enum class State { IDLE { override fun signal() = READY }, READY { override fun signal() = IDLE }; // Středník je povinný před deklarací členů třídy abstract fun signal(): State } - Implementace rozhraní: Třída enum může implementovat rozhraní.
interface Printable { fun printName() } enum class Shape : Printable { CIRCLE { override fun printName() { println("Kruh") } }, SQUARE { override fun printName() { println("Čtverec") } } } - Vlastnosti zabudované: Každá konstanta má zabudované vlastnosti
name(název konstanty jako řetězec) aordinal(pořadí konstanty v deklaraci, počínaje 0).enum class Priority { LOW, MEDIUM, HIGH } fun main() { println(Priority.MEDIUM.name) // Výstup: MEDIUM println(Priority.HIGH.ordinal) // Výstup: 2 } - Vlastní funkce:
enumValues<T>(): Vrací pole všech konstant výčtu.enumValueOf<T>(name: String): Vrací konstantu výčtu s daným názvem. VyhazujeIllegalArgumentException, pokud není nalezena.
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žití ve výrazech
when: Ideální pro použití vewhen. Kompilátor upozorní, pokud nejsou pokryty všechny větve (při použití jako výraz s návratovou hodnotou).fun processStatus(status: Status) { when (status) { Status.SUCCESS -> println("Úspěšně") Status.ERROR -> println("Chyba") Status.PENDING -> println("Čekání") } }
Enum v Kotlin jsou mocnější než jejich protějšky v Java, umožňují přidávat vlastnosti, metody a implementovat rozhraní.