Sobes.tech
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дагы аналогдорго салыштырмалуу күчтүү, мүлктөрдү, методдорду кошууга жана интерфейстерди ишке ашырууга мүмкүндүк берет.