枚舉類最基本的用法是實現一個類型安全的枚舉(typesafe enum)垢村,什么叫做類型安全的枚舉呢,即每個枚舉都是枚舉類的實例且不提供公共的構造方法岖圈。
enum class Color{
RED, GREEN, BLUE, WHITE, BLACK
}
枚舉類使用關鍵字enum
標記,enum
關鍵字在類頭中的class
關鍵字前面稿湿。
enum class 類名{
...
}
枚舉常量
- 枚舉常量是指枚舉類下的對象澎现,每個枚舉類包含0到多個枚舉常量仅胞。
- 枚舉常量使用逗號分隔,每個枚舉常量都是一個對象剑辫。
- 枚舉類中的每個枚舉常量都是一個對象干旧,枚舉常量之間使用逗號分隔。
- 枚舉常量也可以被定義在自己的匿名類中
- 每個枚舉都是枚舉類的實例妹蔽,都可以被初始化椎眯。
根據枚舉值的名稱獲取枚舉實例
EnumClass.valueOf(value:String)
獲取所有枚舉實例
EnumClass.values()
例如:
//定義枚舉類
enum class LogLevel{
VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT
}
//測試運行
fun main(args:Array<String>){
val level:LogLevel = LogLevel.DEBUG
println(level.name)//DEBUG
println(level.ordinal)//1
println(LogLevel.values())//[LLogLevel;@6e8cf4c6
println(LogLevel.valueOf("ERROR"))//ERROR
println(LogLevel.ERROR)//ERROR
println(LogLevel.ERROR.ordinal)//4
println(LogLevel.ERROR.name)//ERROR
}
- 每個枚舉常量都擁有屬性,可以獲取它的名稱
name
以及它在枚舉類中聲明的順序ordinal
胳岂。 - 枚舉類的著構造函數默認是私有的编整,若對枚舉常量設置屬性值,需在主構造函數會中進行聲明乳丰,并且在枚舉常量處進行初始化掌测。
例如:
//定義枚舉類
enum class LogLevel(var type:Int){
VERBOSE(1),
DEBUG(2),
INFO(3),
WARN(4),
ERROR(5),
ASSERT(6)
}
//測試運行
fun main(args:Array<String>){
val levels:Array<LogLevel> = LogLevel.values()
for(item in levels){
println("name:${item.name} ordinal:${item.ordinal} type:${item.type} value:${LogLevel.valueOf(item.name)}")
}
}