Kotlin學習之-5.10 枚舉類
使用枚舉類最基本的方法是實現類型安全的枚舉:
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 singal() = TALKING
},
TALKING {
override fun singal() = WAITING
};
abstract fun singal(): ProtocolState
}
用他們自己對應的方法並且複寫基礎方法。注意如果枚舉類定義任何成員,你需要使用封號;
來分隔每個成員的定義,這和Java很像
使用枚舉常量
和Java很像,Kotlin中的枚舉類也有方法可以列出定義的枚舉常量,並且通過名字得到枚舉常量的值。這些函數的簽名如下(假設枚舉類的名字是EnumClass
)
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
如果指定的名字無法匹配到任何類中定義的枚舉,那麼valueOf()
方法會拋出IllegalArgumentException
異常
從Kotlin v1.1之後,可以使用泛型的方式來訪問枚舉,用enumValues<T>()
和enumValueOf<T>()
這兩個方法
enum class RGB { RED, GREEN, BLUE }
inline fun <refied T : Enum<T>> printAllValues() {
print(enumValues<T>().joinToString { it.name })
}
printAllValues<RGB>()
每個枚舉常量在枚舉類的定義中都有用來存儲名字和位置的屬性:
val name: String
val ordinal: Int
枚舉常量也可以實現Comparable
接口,使用自然順序作爲枚舉類中定義的順序。
PS,我會堅持把這個系列寫完,有問題可以留言交流,也關注專欄Kotlin for Android Kotlin安卓開發