Kotlin枚舉類
枚舉類的最基本的用法是實現類型安全的枚舉
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
}
及相應的方法、以及覆蓋基類的方法。注意,如果枚舉類定義任何
成員,要使用分號將成員定義中的枚舉常量定義分隔開,就像
在 Java 中一樣。
使用枚舉常量
就像在 Java 中一樣,Kotlin 中的枚舉類也有合成方法允許列出
定義的枚舉常量以及通過名稱獲取枚舉常量。這些方法的
簽名如下(假設枚舉類的名稱是 EnumClass
):
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
如果指定的名稱與類中定義的任何枚舉常量均不匹配,valueOf()
方法將拋出 IllegalArgumentException
異常。
自 Kotlin 1.1 起,可以使用 enumValues<T>()
和 enumValueOf<T>()
函數以泛型的方式訪問枚舉類中的常量
:
enum class RGB { RED, GREEN, BLUE }
inline fun <reified T : Enum<T>> printAllValues() {
print(enumValues<T>().joinToString { it.name })
}
printAllValues<RGB>() // 輸出 RED, GREEN, BLUE
每個枚舉常量都具有在枚舉類聲明中獲取其名稱和位置的屬性:
val name: String
val ordinal: Int
枚舉常量還實現了 Comparable 接口,
其中自然順序是它們在枚舉類中定義的順序。