Kotlin-枚举类型

来源:互联网 发布:局域网上网监控软件 编辑:程序博客网 时间:2024/06/02 03:13

枚举类的最基本的用法是实现类型安全枚举

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

每个枚举常量都是一个对象,每个常量都用逗号分开。

初始化

因为每个枚举类型都是一个枚举类实例,因此它们也可以初始化:

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

匿名内部类

枚举常量也可以用匿名内部类来声明

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

跟它们响应的方法一样,最好重写它们的基本方法,需要注意的是,不管枚举定义了多少成员,都是需要用逗号来分割开,这点跟Java很一样。

枚举常量的应用

和Java一样,在Kotlin中的枚举类型也是有合成方法允许列出所有枚举常量,或者根据名称来获取枚举类型的值,这些方法的范例如下:

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

在valueOf方法中,如果没有匹配这个枚举类型中定义的常量则会抛出IllegalArumentException异常.

在Kotlin1.1以后,还有一种更方便的方法来访问这些常量,这就是使用enumValues()和enumValueOf() 函数:

enum class RGB { RED, GREEN, BLUE }inline fun <reified T : Enum<T>> printAllValues() {    print(enumValues<T>().joinToString { it.name })}printAllValues<RGB>() // prints RED, GREEN, BLUE

每个枚举常量都有两个隐性常量:

val name:Stringval ordinal:Int

枚举常量也实现了Comparable接口,那么就是说这些枚举常量可以用来对比

原创粉丝点击