初始化
因為每一個枚舉都是枚舉類的實例,所以他們可以是初始化過的。
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