Kotlin学习之枚举类

来源:互联网 发布:mysql replace into 编辑:程序博客网 时间:2024/05/17 23:34
枚举类最基本的用法是实现一个类型安全的枚举。

什么叫类型安全的枚举类呢?

在java中像Color里面就有很常见的:Color.BLACK,Color.WHITE之类的,像Color的这种设计就被称作“类型安全枚举(typesafe enum)”,每一个枚举都是这个枚举类的实例而且不提供公共的构造方法。

在kotlin中:
eg:

enum class Direction {
NORTH, SOUTH, WEST, EAST
}

枚举常量用逗号分开。

枚举初始化:

每一个枚举都是枚举类的实例,它们可以被初始化:
eg:

enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}

匿名类

枚举常量也可以被定义在他们自己的匿名类里。
eg:

enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}

与它对应的方法还有重写基方法。注意,和java一样,枚举类定义了任何成员,都要将成员和枚举常量用分号隔开。
eg:

enum class Direction {
NORTH, SOUTH, WEST, EAST ;
var i:Int=7;
}

使用枚举常量

和java一样,kotlin中的枚举类可以通过合成方法来列出定义了的枚举常量而且通过它的名字来获取枚举常量。这些方法的签名如下(假设枚举类的名字就是EnumClass):

EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>

当枚举类中没有找到指定的枚举常量名的时候,valueOf会抛出IllegalArgumentException
在枚举类的声明中每个枚举常量都有属性去获取它的名字和位置。

val name: String
val ordinal: Int

枚举常量也实现了Comparable接口,在枚举类中定义枚举常量时用自然顺序做为顺序。

每日一补:在kotlin中用when代替了switch分支,这个风格与c就很像了,用法如下:

when (x) {
1 -> print(“x == 1”)
2 -> print(“x == 2”)
else -> { // Note the block
print(“x is neither 1 nor 2”)
}
}

1 0
原创粉丝点击