02-基本用法
6.1.1 基本用法
在Kotlin中,枚举类的一个基本用法就是实现一个类型安全的枚举,枚举常量之间用逗号分隔,每个枚举常量都是一个对象。
enum class Color{
RED,BLACK,BLUE,GREEN,WHITE
}
每一个枚举常量都是枚举类的实例,可以使用下面的方式完成初始化。
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
枚举类的默认名称为枚举字符名,值从0开始,如果需要指定枚举的值,那么可以使用其构造函数。代码如下。
enum class Shape(value:Int){
ovel(100),
rectangle(200)
}
枚举常量也可以声明自己的匿名类、相应的方法以及覆盖基类的方法。代码如下。
enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}
枚举类定义任何成员,都要使用分号将成员定义中的枚举常量分隔开。和Java一样,Kotlin中的枚举类也有合成方法,该方法允许列出定义的枚举常量并通过名称获取枚举常量。
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
如果指定的名称与类中定义的任何枚举常量均不匹配,则valueOf()方法将抛出Illegal ArgumentException异常。
从Kotlin 1.1版本开始,可以使用enumValues
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