Middle
Kokios yra darbo su Enum klasėmis Kotlin?
sobes.tech AI
Atsakymas iš AI
Enum klasė yra ypatingo tipo klasė, naudojama konstantų rinkinio atvaizdavimui.
Ypatybės:
- Konstantų apibrėžimas: Kiekviena enum konstantė yra enum klasės egzempliorius.
enum class Color { RED, GREEN, BLUE } - Savybės ir metodai: Enum klasės gali turėti savybes ir metodus. Kiekviena konstantė gali juos įgyvendinti skirtingai.
enum class Status(val description: String) { SUCCESS("Operacija sėkmingai atlikta"), ERROR("Įvyko klaida"), PENDING("Laukia") } enum class Direction { NORTH, SOUTH, EAST, WEST; fun getOpposite(): Direction { return when (this) { NORTH -> SOUTH SOUTH -> NORTH EAST -> WEST WEST -> EAST } } } - Anoniminės klasės: Kiekviena enum konstantė gali būti deklaruota su anonimine klase, kuri teikia savo metodų ar savybių įgyvendinimus.
enum class State { IDLE { override fun signal() = READY }, READY { override fun signal() = IDLE }; // Taškas ir kablelis yra privalomi prieš klasės narius abstract fun signal(): State } - Interfeisų įgyvendinimas: Enum klasė gali įgyvendinti interfeisus.
interface Printable { fun printName() } enum class Shape : Printable { CIRCLE { override fun printName() { println("Apskritimas") } }, SQUARE { override fun printName() { println("Kvadratas") } } } - Įmontuotos savybės: Kiekviena konstantė turi įmontuotas savybes
name(konstantės pavadinimas kaip eilutė) irordinal(konstantės pozicija deklaracijoje, pradedant nuo 0).enum class Priority { LOW, MEDIUM, HIGH } fun main() { println(Priority.MEDIUM.name) // Išvestis: MEDIUM println(Priority.HIGH.ordinal) // Išvestis: 2 } - Įmontuotos funkcijos:
enumValues<T>(): Grąžina masyvą su visomis enum konstantomis.enumValueOf<T>(name: String): Grąžina enum konstantą pagal pavadinimą. MetaIllegalArgumentException, jei nerandama.
fun main() { val allPriorities = enumValues<Priority>() println(allPriorities.joinToString()) // Išvestis: LOW, MEDIUM, HIGH val highPriority = enumValueOf<Priority>("HIGH") println(highPriority) // Išvestis: HIGH } - Naudojimas
whenišraiškose: Idealiai tinka naudotiwhen. Kompiliatorius įspės, jei nėra padengtos visos šakos (naudojant kaip išraišką su grąžinama verte).fun processStatus(status: Status) { when (status) { Status.SUCCESS -> println("Sėkmingai") Status.ERROR -> println("Klaida") Status.PENDING -> println("Laukia") } }
Kotlin enum yra galingesni nei jų analogai Java, leidžiant pridėti savybes, metodus ir įgyvendinti interfeisus.