Kotlin 列挙型

列挙型の最も基本的な使い方は、型安全な列挙を実装することです。

列挙定数はカンマで区切られ、各列挙定数はオブジェクトです。

enum class Color{
    RED,BLACK,BLUE,GREEN,WHITE
}

列挙の初期化

すべての列挙は列挙型のインスタンスであり、初期化することができます:

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

デフォルトの名前は列挙の文字名で、値は0から始まります。値を指定する必要がある場合は、そのコンストラクタを使用できます:

enum class Shape(value:Int){
    ovel(100),
    rectangle(200)
}

列挙はまた、独自の匿名クラスと対応するメソッド、および基底クラスのメソッドをオーバーライドすることを宣言することもサポートしています。例:

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

    TALKING {
        override fun signal() = WAITING
    };

    abstract fun signal(): ProtocolState
}

列挙型がメンバーを定義する場合、セミコロンを使用してメンバー定義内の列挙定数定義を区切る必要があります


列挙定数の使用

Kotlin の列挙型には合成メソッドがあり、定義された列挙定数を反復処理し、その名前で列挙定数を取得できます。

EnumClass.valueOf(value: String): EnumClass  // 转换指定 name 为枚举值,若未匹配成功,会抛出IllegalArgumentException
EnumClass.values(): Array<EnumClass>        // 以数组的形式,返回枚举值

列挙に関する情報を取得する:

val name: String //获取枚举名称
val ordinal: Int //获取枚举值在所有枚举数组中定义的顺序

例

enum class Color{
    RED,BLACK,BLUE,GREEN,WHITE
}

fun main(args: Array<String>) {
    var color:Color=Color.BLUE

    println(Color.values())
    println(Color.valueOf("RED"))
    println(color.name)
    println(color.ordinal)

}

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



fun main(args: Array<String>) {
    printAllValues<RGB>() // 输出 RED, GREEN, BLUE
}
その他の拡張