文章目录
定义
枚举类可枚举出一系列对象,使用enum
修饰,在其内部只需要写出枚举对象的名称,用逗号,
分割即可(这里的Red
、Green
和Blue
都是PrimaryColor
类型的枚举对象)。
kt
enum class PrimaryColor {
Red, Green, Blue
}
枚举类与密封类和接口类似,不可被实例化。
此外,枚举类还不能被继承。
Note:成员只能置于枚举对象之后,枚举对象后如果要定义其他成员,记得在最后一个枚举对象后加上分号
;
。
构造函数
枚举类可以拥有主、次构造方法:
kt
enum class PrimaryColor(val hex: Long, param: Any) {
Red(0xFFFF0000), Green(0xFF00FF00), Blue(0xFF0000FF);
constructor(hex: Long): this(0x00000000, 1)
}
普通成员
在枚举类中可以声明属性或方法:
kt
enum class PrimaryColor(hex: Long) {
Red(0xFFFF0000), Green(0xFF00FF00), Blue(0xFF0000FF);
val red = 0f
fun toRGBA() {}
}
Note:枚举对象中会生成
name
、ordinal
等成员,并且不可重写(final),定义成员时不要与它们重名。
抽象成员
枚举类中可以定义抽象abstract
成员,每一个枚举对象都必须重写抽象成员:
kt
enum class PrimaryColor(hex: Long) {
Red(0xFFFF0000) {
override fun toRGBA() {}
},
Green(0xFF00FF00) {
override fun toRGBA() {}
},
Blue(0xFF0000FF) {
override fun toRGBA() {}
};
abstract fun toRGBA()
}
when 分支判定
与密封类、接口类似,当when
判断值为枚举类型并且所有情况必须列出时,如果将全部分支给出,则无需给出else
分支:
kt
enum class PrimaryColor {
Red, Green, Blue
}
// 此时分支必须全部给出,给不全要使用 else 收尾
fun checkPrimaryColor(color: PrimaryColor) = when (color) {
PrimaryColor.Red -> "红色"
PrimaryColor.Green -> "绿色"
PrimaryColor.Blue -> "蓝色"
}
fun main() {
print(checkPrimaryColor(PrimaryColor.Red))
}
红色