初始化
因为每一个枚举都是枚举类的实例,所以他们可以是初始化过的。
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
匿名类
枚举常量也可以声明自己的匿名类
enum class EnumClass{
WAITING{
override fun signal(): Unit {
}
},
TALKING{
override fun signal(): Unit {
}
};
abstract fun signal(): Unit
}
抽象类中增加了抽象方法后,每个常量都必须实现这个抽象方法
使用枚举常量
可以使用
val name: EnumClass = EnumClass.valueOf("WAITING")```获取各个枚举常量,从1.1之后又增加了```enumValues<T>()``` 和 ```enumValueOf<T>()```两个函数,每个枚举常量都有两个属性:```val name: Stringval ordinal: Int```,并实现了Comparable接口,顺序就是它们在枚举类中的顺序
枚举常量还实现了 [Comparable](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-comparable/index.html) 接口, 其中自然顺序是它们在枚举类中定义的顺序。
官方的例子中使用了内联函数,我还不是很懂,这里就不在过多解释
enum class RGB { RED, GREEN, BLUE }
inline fun <reified T : Enum<T>> printAllValues() {
print(enumValues<T>().joinToString { it.name })
}
printAllValues<RGB>() // 输出 RED, GREEN, BLUE