阅读完需:约 2 分钟
枚举类
枚举类最基本的用法是实现一个类型安全的枚举。
枚举常量用逗号分隔,每个枚举常量都是一个对象。
enum class Color{
RED,BLACK,BLUE,GREEN,WHITE
}
每一个枚举都是枚举类的示例,它们可以被初始化:
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}

kotlin 在调用枚举的时候从方法变成了调用属性

枚举是可以调用构造器的
枚举例子:
enum class State {
Idle, Busy
}
//枚举定义构造函数 同java
enum class State1(val id: Int) {
Idle(0), Busy(1)
}
enum class Color {
White, Red, Green, Blue, Yellow, Black
}
fun main() {
State.Idle.name // Idle
State.Idle.ordinal // 0
val state = State.Idle
//枚举全部值
val value = when (state) {
State.Idle -> { 0 }
State.Busy -> { 1 }
}
//枚举创建区间
val colorRange = Color.White .. Color.Green
val color = Color.Blue //Blue不在区间内
println(color in colorRange)
}
枚举更多使用
枚举类不可继承其他类,因为枚举类有父类是enum
,但是可以实现接口:


enum class State: Runnable{
Idle, Busy{
override fun run() {
println("For Busy State.")
}
};
override fun run() {
println("For Every State.")
}
}
fun main() {
State.Idle.run()
State.Busy.run()
}
枚举类可以定义扩展函数:

fun State.successor(): State? {
return State.values().let {
if (ordinal + 1 >= it.size) null
else it[ordinal + 1]
}
}
fun State.predecessor(): State? {
return State.values().let {
if (ordinal - 1 < 0) null
else it[ordinal - 1]
}
}
fun main() {
println(State.Idle.successor())
println(State.Busy.successor())
}
枚举本身是完备的,可以进行很多操作

枚举的数量是有限的所以可以进行筛选

枚举是有顺序的,所以可以进行比较

同理枚举是有顺序的