文章目录

定义

  1. Kotlin使用enum class定义枚举类。枚举类是一种特殊的类,可以有自己的属性、方法、可以实现一个或多个接口,也可以定义构造器

  2. 使用enum定义的枚举类默认继承kotlin.Enum类,所以枚举类不能显示继承其他父类。kotlin.Enum实现了kotlin.Comparable接口

  3. 使用enum定义的非抽象的枚举类不能使用open修饰,因此枚举类不能派生子类

  4. 枚举类的构造器只能使用private修饰,如果省略修饰,默认是private。

  5. 枚举类的所有实例必须在枚举类的第一行显示指定,多个实例使用逗号分隔。

  6. 案例

    enum class Season {
        SPRING, SUMMER, FALL, WINER
    }
    
    fun main() {
        //1. 遍历
        for (seaon in Season.values()) {
            println(seaon)
        }
        //2.遍历
        enumValues<Season>().forEach { println(it.name) }
    
        //SPRING
        val se = Season.valueOf("SPRING")
        println(se)
        //WINER
        println(Season.WINER.name)
        //WINER
        println(Season.WINER.toString())
        //3
        println(Season.WINER.ordinal)
        //true
        println(Season.SPRING.equals(se))
    }
    

方法与属性

  1. 枚举的属性都是只读属性,枚举必须在构造器中为这些属性指定初始值,或者在初始化块中执行初始值

    enum class Status(val value: Int, val desc: String) {
        NORMAL(0, "正常"), DELETE(1, "已删除");
    
        fun printDesc() {
            when (this) {
                this -> println(this.desc)
            }
        }
    
    }
    fun main() {
        Status.DELETE.printDesc()
    }
    
  2. 实现接口:枚举类可以实现一个或多个接口.枚举类也可以包含抽象方法

    
    interface Desc {
        fun printDesc(): Unit;
    }
    
    enum class Status2(val value: Int, val desc: String) : Desc {
        NORMAL(0, "正常") {
            override fun printDesc() {
                println(this.desc)
            }
        },
        DELETE(1, "已删除") {
            override fun printDesc() {
                println(this.desc)
            }
        };
    
        abstract override fun printDesc(): Unit;
    }
    
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐