枚举类
Kotlin官网:Classes and Objects-Enum Classes
基本用法和Java相同,每个枚举常量都是个对象,逗号分隔
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
}
枚举类可以定义方法,在枚举常量的匿名类中重写。
枚举常量和枚举类的成员用分号分隔。
对于嵌套类型,只能包含内部类(inner class),不能包含其他嵌套类型(Kotlin1.2中废除)。
使用枚举常量
和Java相同,枚举常量包含列出所有枚举常量的方法和通过名字获取枚举常量的方法。
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
通过名字过去枚举常量valueOf()对于不存在的名字会抛出”IllegalArgumentException”。
自Kotlin1.1起增加带泛型的函数
enum class RGB { RED, GREEN, BLUE }
inline fun <reified T : Enum<T>> printAllValues() {
print(enumValues<T>().joinToString { it.name })
}
printAllValues<RGB>() // prints RED, GREEN, BLUE
每个枚举常量都包含名字和顺序(枚举常量在枚举类中定义的顺序)两个属性:
val name: String
val ordinal: Int
枚举常量也实现了Comparable接口,比较规则为顺序属性的自然排序(在枚举类中定义的顺序)