Middle
Millised on Enum klassidega töötamise omadused Kotlinis?
sobes.tech AI
Vastus AI-lt
Enum klass on spetsiaalne klassi tüüp, mida kasutatakse konstantide kogumi esitamiseks.
Omadused:
- Konstantide määratlemine: Iga enum-konstant on enum-klassi eksemplar.
enum class Color { RED, GREEN, BLUE } - Omadused ja meetodid: Enum-klassi võib omada omadusi ja meetodeid. Iga konstant võib neid erinevalt rakendada.
enum class Status(val description: String) { SUCCESS("Operatsioon õnnestus"), ERROR("Tekkis viga"), PENDING("Ootamine") } enum class Direction { NORTH, SOUTH, EAST, WEST; fun getOpposite(): Direction { return when (this) { NORTH -> SOUTH SOUTH -> NORTH EAST -> WEST WEST -> EAST } } } - Anonüümklassid: Iga enum-konstant võib olla defineeritud anonüümklassi abil, mis pakub oma meetodite või omaduste rakendusi.
enum class State { IDLE { override fun signal() = READY }, READY { override fun signal() = IDLE }; // Punkt ja koma on kohustuslik enne klassi liikmete deklaratsioone abstract fun signal(): State } - Interfeiside rakendamine: Enum-klassi saab rakendada interfeise.
interface Printable { fun printName() } enum class Shape : Printable { CIRCLE { override fun printName() { println("Ring") } }, SQUARE { override fun printName() { println("Ruut") } } } - Sisseehitatud omadused: Igal konstantil on sisseehitatud omadused
name(konstantide nimi stringina) jaordinal(konstantide positsioon deklaratsioonis, alates 0).enum class Priority { LOW, MEDIUM, HIGH } fun main() { println(Priority.MEDIUM.name) // Väljund: MEDIUM println(Priority.HIGH.ordinal) // Väljund: 2 } - Sisseehitatud funktsioonid:
enumValues<T>(): Tagastab massiivi kõigist enum-konstantidest.enumValueOf<T>(name: String): Tagastab enum-konstanti nime järgi. ViskabIllegalArgumentException, kui konstant ei leidu.
fun main() { val allPriorities = enumValues<Priority>() println(allPriorities.joinToString()) // Väljund: LOW, MEDIUM, HIGH val highPriority = enumValueOf<Priority>("HIGH") println(highPriority) // Väljund: HIGH } - Kasutamine
whenväljendites: Ideaalne kasutamisekswhen. Kompilatsioonirakendus hoiatab, kui kõik juhtumid pole kaetud (kasutades väljendina koos tagastusega).fun processStatus(status: Status) { when (status) { Status.SUCCESS -> println("Õnnestus") Status.ERROR -> println("Viga") Status.PENDING -> println("Ootamine") } }
Kotlin enumid on võimsamad kui nende Java ekvivalendid, võimaldades lisada omadusi, meetodeid ja rakendada interfeise.