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):

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

如果指定的名稱與類中定義的任何枚舉常量均不匹配,valueOf() 方法將拋出 IllegalArgumentException 異常。

自 Kotlin 1.1 起,可以使用 enumValues<T>()enumValueOf<T>() 函數以泛型的方式訪問枚舉類中的常量

enum class RGB { RED, GREEN, BLUE }

inline fun <reified T : Enum<T>> printAllValues() {
    print(enumValues<T>().joinToString { it.name })
}

printAllValues<RGB>() // 輸出 RED, GREEN, BLUE

每個枚舉常量都具有在枚舉類聲明中獲取其名稱和位置的屬性:

val name: String
val ordinal: Int

枚舉常量還實現了 Comparable 接口,
其中自然順序是它們在枚舉類中定義的順序。