Kotlin-枚举类型

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

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): EnumClass
EnumClass.values(): Array

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

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

enum class RGB { RED, GREEN, BLUE }

inline fun Enum> printAllValues() {
    print(enumValues().joinToString { it.name })
}

printAllValues() // prints RED, GREEN, BLUE

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

val name:String
val ordinal:Int

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

你可能感兴趣的:(我和Android,Kotlin)