signed

QiShunwang

“诚信为本、客户至上”

kotlin枚举类

2021/1/28 14:00:50   来源:

枚举类

基本用法

enum class Season {
    SPRING,SUMMER,AUTUMN,WINTER
}

初始化

enum class Color(val rgb: Int) {
    RED(0xFF0000),
    GREEN(0x00FF00),
    BLUE(0x0000FF)
}

匿名类

枚举类中的每个实例也可以有自己的方法,或者实现外面的方法。

enum class ProtocolState {
    WAITING {
        override fun signal() = TALKING
    },

    TALKING {
        override fun signal() = WAITING
    };

    abstract fun signal(): ProtocolState
}

当枚举类中有任何的成员时,需要用分号将成员与枚举常量分割。

枚举类实现接口

枚举类可以实现接口,但是不能继承类,实现的接口中的抽象方法可以由枚举类统一实现,也可以由每个枚举常量单独实现。

enum class IntArithmetics : BinaryOperator<Int>, IntBinaryOperator {
    PLUS {
        override fun apply(t: Int, u: Int): Int = t + u
    },
    TIMES {
        override fun apply(t: Int, u: Int): Int = t * u
    };

    override fun applyAsInt(t: Int, u: Int) = apply(t, u)
}

枚举类的使用

每个枚举类都有下面两个方法和两个属性:

EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>

val name: String
val ordinal: Int

具体使用如下:

var red = Color.RED
var valueOf = Color.valueOf("RED")
assertTrue { red == valueOf }

var values = Color.values()
for(i in values.indices) {
    println("name: ${values[i].name}, order: ${values[i].ordinal}")
}