Kotlin枚舉類
枚舉類最基本的方法就是實現一個類型安全的枚舉。
枚舉常量用逗號分隔,每一個枚舉都是一個對象。
enum class Color {
RED,
BLACK,
WHITE
}
枚舉初始化
每一個枚舉都是枚舉類實例,都可以被初始化
enum class Color(val rgb: Int) {
RED(0xFF0000),
BLACK(0x000000),
WHITE(0xFFFFFF)
}
默認名稱爲枚舉字符名,值從0
開始。若需要指定值,則可以使用其構造函數:
enum class Shape(value: Int){
OVAL(100),
RECTANGLE(200)
}
枚舉還支持以聲明自己的匿名類及相應的方法、以及覆蓋基類的方法。如:
enum class ProtocolState {
WAITING {
override fun signal() = WAITING
},
TALKING {
override fun signal(): ProtocolState {
return TALKING
}
};
abstract fun signal(): ProtocolState
}
如果枚舉類定義任何成員,要使用分號將成員定義中的枚舉常量定義分隔開
使用枚舉常量
Kotlin 中的枚舉類具有合成方法,允許遍歷定義的枚舉常量,並通過其名稱獲取枚舉常數。
EnumClass.valueOf(value: String): EnumClass // 轉換指定 name 爲枚舉值,若未匹配成功,會拋出IllegalArgumentException
EnumClass.values(): Array<EnumClass> // 以數組的形式,返回枚舉值
獲取枚舉相關信息:
val name: String //獲取枚舉名稱
val ordinal: Int //獲取枚舉值在所有枚舉數組中定義的順序
實例:
fun main(args: Array<String>) {
val mColor = Color.BLACK
println(Color.values())
println(Color.valueOf("BLUE"))
println(mColor.name)
println(mColor.ordinal)
}
打印結果
[Lcom.qfxl.kotlin.Color;@3dee2310
BLUE
BLACK
1
自 Kotlin 1.1 起,可以使用 enumValues() 和 enumValueOf() 函數以泛型的方式訪問枚舉類中的常量 :
fun main(args: Array<String>) {
printAll<Color>()
}
inline fun <reified T : Enum<T>> printAll() {
println(enumValues<T>().joinToString { it.name })
}
enum class Color {
RED,
BLACK,
BLUE
}
輸出結果
RED, BLACK, BLUE