官方文檔: http://kotlinlang.org/docs/reference/enum-classes.html
1.枚舉類(enum class)
枚舉類(enum class)基本用法,特性,和java差不多:
enum class Direction {
//每個枚舉常量(Enum Constants)都是一個對象,用逗號分隔
NORTH, SOUTH, WEST, EAST
}
2.初始化(Initialization)
因為每個枚舉常量都是一個對象,所以都有初始化:
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
3.匿名類(Anonymous Classes)
每個枚舉常量都能聲明匿名類:
enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
}; //注意:像Java一樣,Kotlin枚舉常量也需要分號;分隔!
abstract fun signal(): ProtocolState
}
4.使用枚舉常量(Enum Constants)
像Java一樣,Kotlin枚舉類也有合成方法,允許訪問枚舉常量:
enum class RGB {
RED, GREEN, BLUE
}
//通過名字獲取枚舉常量
RGB.valueOf(value: String): EnumClass
//獲取枚舉常量列表
RGB.values(): Array<EnumClass>
自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
像Java一樣,每個枚舉常量都有兩個屬性-聲明名字和聲明位置:
val name: String
val ordinal: Int
枚舉常量也實現(xiàn)了Comparable接口, 其中自然順序(natural order)是在枚舉類中的定義順序!
簡書:http://www.reibang.com/p/6af7998af8d1
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/73692421
GitHub博客:http://lioil.win/2017/06/24/Kotlin-enum-classes.html
Coding博客:http://c.lioil.win/2017/06/24/Kotlin-enum-classes.html