Middle
Kotlin'da Enum sinflari bilan ishlashning xususiyatlari qanday?
sobes.tech AI
AIdan javob
Enum sinfi — bu maxsus turdagi sinf bo‘lib, konstantalar to‘plamini ifodalash uchun ishlatiladi.
Xususiyatlar:
- Konstantalarni aniqlash: Har bir enum konstantasi enum sinfining nusxasidir.
enum class Color { RED, GREEN, BLUE } - Xususiyatlar va metodlar: Enum sinflar xususiyatlar va metodlarga ega bo‘lishi mumkin. Har bir konstantalar ularni turlicha amalga oshirishi mumkin.
enum class Status(val description: String) { SUCCESS("Muvaffaqiyatli bajarildi"), ERROR("Xato yuz berdi"), PENDING("Kutmoqda") } enum class Direction { NORTH, SOUTH, EAST, WEST; fun getOpposite(): Direction { return when (this) { NORTH -> SOUTH SOUTH -> NORTH EAST -> WEST WEST -> EAST } } } - Noma’lum sinflar: Har bir enum konstantasi, metodlar yoki xususiyatlar uchun o‘z amalga oshirishlarini taqdim etadigan noma’lum sinf bilan e’lon qilinishi mumkin.
enum class State { IDLE { override fun signal() = READY }, READY { override fun signal() = IDLE }; // Nuqta va vergul sinf a’zolarini e’lon qilishdan oldin majburiy abstract fun signal(): State } - Interfeyslarni amalga oshirish: Enum sinf interfeýslarni amalga oshirishi mumkin.
interface Printable { fun printName() } enum class Shape : Printable { CIRCLE { override fun printName() { println("Doira") } }, SQUARE { override fun printName() { println("To‘rtburchak") } } } - O‘rnatilgan xususiyatlar: Har bir konstantada o‘rnatilgan
name(konstantaning nomi satr sifatida) vaordinal(e’lon qilingan joyi, 0 dan boshlanadi) mavjud.enum class Priority { LOW, MEDIUM, HIGH } fun main() { println(Priority.MEDIUM.name) // Chiqish: MEDIUM println(Priority.HIGH.ordinal) // Chiqish: 2 } - O‘rnatilgan funksiyalar:
enumValues<T>(): Enum sinfidagi barcha konstantalarni o‘z ichiga olgan massivni qaytaradi.enumValueOf<T>(name: String): Berilgan nom bilan enum konstantasini qaytaradi. Agar topilmasa,IllegalArgumentExceptionchiqaradi.
fun main() { val allPriorities = enumValues<Priority>() println(allPriorities.joinToString()) // Chiqish: LOW, MEDIUM, HIGH val highPriority = enumValueOf<Priority>("HIGH") println(highPriority) // Chiqish: HIGH } whenifodasida foydalanish:whenuchun ideal. Kompilyator, agar barcha shoxlar qamrab olinmagan bo‘lsa, ogohlantiradi (qaytariladigan ifoda sifatida foydalanilganda).fun processStatus(status: Status) { when (status) { Status.SUCCESS -> println("Muvaffaqiyat") Status.ERROR -> println("Xato") Status.PENDING -> println("Kutmoqda") } }
Kotlin'dagi enumlar, Java'dagilarga nisbatan yanada kuchliroq bo‘lib, xususiyatlar, metodlar qo‘shish va interfeyslarni amalga oshirish imkonini beradi.