-
枚举类的最基本的用法是实现类型安全的枚举,列出有限的类型;
-
跟Java不同,Kotlin中声明枚举类是使用
enum class
(Java中是使用enum
)
enum class Color() {
RED,
GRENN,
BLUE
}
- 枚举类的每一个枚举,都是枚举类类型的;
- Kotlin中,枚举类是可以有成员变量的,而且可以使用构造函数进行初始化;
enum class Color(var rbg: Int) {
RED(0xFF0000),
GRENN(0x00FF00),
BLUE(0x0000FF)
}
- 枚举类的内一个枚举,都可以声明自己的匿名内部类;
enum class Color(var rbg: Int) {
RED(0xFF0000){
override fun desc() : String {
return "Red(0xFF0000)"
}
},
GRENN(0x00FF00){
override fun desc() : String {
return "Red(0x00FF00)"
}
},
BLUE(0x0000FF){
override fun desc() : String {
return "Blue(0x0000FF)"
}
};
abstract fun desc(): String
}
-
在Kotlin中,枚举类可以实现接口,但是不能继承类;
-
枚举实现接口,可以为每个条目对接口成员的统一实现(在枚举类中统一实现);
enum class Color(var rgb: Int) : ColorBoard {
RED(0xFF0000){
override fun desc() : String {
return "Red(0xFF0000)"
}
},
GRENN(0x00FF00){
override fun desc() : String {
return "Red(0x00FF00)"
}
},
BLUE(0x0000FF){
override fun desc() : String {
return "Blue(0x0000FF)"
}
};
abstract fun desc(): String
override fun mix(color: Color): Int {
return this.rgb or color.rgb;
}
}
- 枚举实现接口,也可以为每个条目单独对接口每个成员实现(采用匿名内部类的方式);
enum class Color(var rgb: Int) : ColorBoard {
RED(0xFF0000){
override fun desc() : String {
return "Red(0xFF0000)"
}
override fun mix(color: Color): Int {
return color.rgb or this.rgb + 1
}
},
GRENN(0x00FF00){
override fun desc() : String {
return "Red(0x00FF00)"
}
override fun mix(color: Color): Int {
return color.rgb or this.rgb + 2
}
},
BLUE(0x0000FF){
override fun desc() : String {
return "Blue(0x0000FF)"
}
override fun mix(color: Color): Int {
return color.rgb or this.rgb + 3
}
};
abstract fun desc(): String
}
interface ColorBoard {
fun mix(color: Color) : Int
}
- 跟 Java 一样,Kotlin 中的枚举类有自动生成的方法允许列出定义的枚举常量以及通过名称获取枚举常量,方法签名如下。
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
- 使用
valueOf()
方法通过名称获取枚举常量时,如果找不到跟输入名称对应的常量,将会抛出IllegalArgumentException
异常