枚举类的基本用法是实现类型安全枚举:
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
每个枚举常量都是一个对象,枚举常量用逗号隔开。
初始化
由于每个枚举都是枚举类的一个实例,他们能初始化如下:
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
}
如果枚举类中定义了其它成员,需要用分号将枚举常量和其它成员隔开,就像Java一样。
实现接口
一个枚举类可以实现接口(但是不能继承类), 可以选择统一实现接口的成员或者每个枚举在其匿名类中单独实现.
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
};
//统一实行方法applyAsInt
override fun applyAsInt(t: Int, u: Int) = apply(t, u)
}
使用枚举常量
和Java一样,Kotlin也有列出枚举类中所有枚举常量和通过名字获取单个枚举的方法。
假设枚举类的名字为EnumClass
//通过名字获取单个枚举
EnumClass.valueOf(value: String): EnumClass
//获取所有枚举
EnumClass.values(): Array<EnumClass>
所有枚举常量都有两个固定的属性: name
和ordinal
- name: String 返回枚举的名称
- ordinal: Int 返回枚举在所有枚举常量中的位置,初始位置为0