Middle
Kotlinдеги Enum класстары менен иштөө өзгөчөлүктөрү кандай?
sobes.tech AI
AIден жооп
Энм класс — бул атайын түрдөгү класс, ал константтардын топтомун көрсөтүү үчүн колдонулат.
Өзгөчөлүктөрү:
- Константтарды аныктоо: Ар бир энм константасы — энм классынын экземпляры.
enum class Color { RED, GREEN, BLUE } - Мүлктөр жана методдор: Энм класстары мүлктөр жана методдорду камтышы мүмкүн. Ар бир константа аларды ар башкача ишке ашыра алат:
enum class Status(val description: String) { SUCCESS("Иш аяктады ийгиликтүү"), ERROR("Ката кетти"), PENDING("Күтүү") } enum class Direction { NORTH, SOUTH, EAST, WEST; fun getOpposite(): Direction { return when (this) { NORTH -> SOUTH SOUTH -> NORTH EAST -> WEST WEST -> EAST } } } - Анонимдик класстар: Ар бир энм константасын анонимдик класс менен жарыялоо мүмкүн, ал өзүнүн методдорун же мүлктөрүн ишке ашыра алат:
enum class State { IDLE { override fun signal() = READY }, READY { override fun signal() = IDLE }; // Точка жана үтүк белгиси милдеттүү abstract fun signal(): State } - Интерфейстерди ишке ашыруу: Энм класстары интерфейстерди ишке ашыра алат:
interface Printable { fun printName() } enum class Shape : Printable { CIRCLE { override fun printName() { println("Айлана") } }, SQUARE { override fun printName() { println("Төрт бурчтук") } } } - Ичке мүлктөр: Ар бир константа ички мүлктөргө ээ:
name(константтын аты — саптама түрүндө) жанаordinal(константтын орундугу — 0-ден баштап)enum class Priority { LOW, MEDIUM, HIGH } fun main() { println(Priority.MEDIUM.name) // Чыгуу: MEDIUM println(Priority.HIGH.ordinal) // Чыгуу: 2 } - Ичке функциялар:
enumValues<T>(): Бардык константтарды камтыган массивди кайтарат.enumValueOf<T>(name: String): Аты боюнча константты кайтарат. Эгер табылбаса,IllegalArgumentExceptionчыгарат.
fun main() { val allPriorities = enumValues<Priority>() println(allPriorities.joinToString()) // Чыгуу: LOW, MEDIUM, HIGH val highPriority = enumValueOf<Priority>("HIGH") println(highPriority) // Чыгуу: HIGH } whenоператорунда колдонуу: Булwhenүчүн эң ылайыктуу. Компилятор бардык тармактар камтылганын эскертет (кайсы бир мааниге кайтаруу үчүн колдонулганда).fun processStatus(status: Status) { when (status) { Status.SUCCESS -> println("Ийгиликтүү") Status.ERROR -> println("Ката") Status.PENDING -> println("Күтүү") } }
Kotlinдеги энмдер Javaдагы аналогдорго салыштырмалуу күчтүү, мүлктөрдү, методдорду кошууга жана интерфейстерди ишке ашырууга мүмкүндүк берет.