枚举类
基本用法
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}")
}