Middle
Milyen jellemzői vannak az Enum osztályokkal való munkának Kotlinban?
sobes.tech MI
Válasz az MI-től
Az enum osztály egy speciális típusú osztály, amelyet állandó értékek halmazának ábrázolására használnak.
Jellemzők:
- Állandók meghatározása: Minden enum állandó egy példánya az enum osztálynak.
enum class Color { RED, GREEN, BLUE } - Tulajdonságok és metódusok: Az enum osztályoknak lehetnek tulajdonságaik és metódusaik. Minden állandó másképp valósíthatja meg őket.
enum class Status(val description: String) { SUCCESS("Sikeres művelet"), ERROR("Hiba történt"), PENDING("Várakozás") } enum class Direction { NORTH, SOUTH, EAST, WEST; fun getOpposite(): Direction { return when (this) { NORTH -> SOUTH SOUTH -> NORTH EAST -> WEST WEST -> EAST } } } - Névtelen osztályok: Minden enum állandó deklarálható névtelen osztállyal, amely saját metódusokat vagy tulajdonságokat valósít meg.
enum class State { IDLE { override fun signal() = READY }, READY { override fun signal() = IDLE }; // A pontosvessző kötelező az osztálytagok előtt abstract fun signal(): State } - Interfészek megvalósítása: Az enum osztály megvalósíthat interfészeket.
interface Printable { fun printName() } enum class Shape : Printable { CIRCLE { override fun printName() { println("Kör") } }, SQUARE { override fun printName() { println("Négyzet") } } } - Beépített tulajdonságok: Minden állandónak beépített tulajdonságai vannak:
name(az állandó neve sztringként) ésordinal(az állandó pozíciója a deklarációban, 0-tól kezdődően).enum class Priority { LOW, MEDIUM, HIGH } fun main() { println(Priority.MEDIUM.name) // Kimenet: MEDIUM println(Priority.HIGH.ordinal) // Kimenet: 2 } - Beépített függvények:
enumValues<T>(): Visszaadja az összes enum állandót tartalmazóArray-t.enumValueOf<T>(name: String): Visszaadja a megadott névvel rendelkező enum állandót.IllegalArgumentException-t dob, ha nem található.
fun main() { val allPriorities = enumValues<Priority>() println(allPriorities.joinToString()) // Kimenet: LOW, MEDIUM, HIGH val highPriority = enumValueOf<Priority>("HIGH") println(highPriority) // Kimenet: HIGH } - Használat
whenkifejezésekben: Ideáliswhen-ben való használatra. A fordító figyelmeztet, ha nem minden ág van lefedve (ha értékadásként használják visszatérési értékkel).fun processStatus(status: Status) { when (status) { Status.SUCCESS -> println("Sikeres") Status.ERROR -> println("Hiba") Status.PENDING -> println("Várakozás") } }
A Kotlin enumjai erősebbek, mint Java megfelelőik, lehetővé téve tulajdonságok, metódusok hozzáadását és interfészek megvalósítását.