English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Kotlin 枚举クラス

エnumクラスの最も基本的な使用法は、タイプセーフなエnumを実現することです。

エnum定数はコンマで区切られ、各エnum定数はオブジェクトです。

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

エnum初期化

各エnumはエnumクラスの例です。それらは初期化できます:

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

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

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

エnumは、独自の匿名クラスおよび相应のメソッド、および基底クラスのメソッドをオーバーライドすることをサポートします。例えば:

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

エnumクラスがメンバーを定義している場合、分号でメンバー定義内のエnum定数の定義を区切ります

エnum定数を使用します

Kotlinのエnumクラスには合成メソッドがあり、定義されたエnum定数を巡回し、その名前でエnum定数を取得することができます。

EnumClass.valueOf(value: String): EnumClass  // 指定されたnameをエnum値に変換します。一致しない場合、IllegalArgumentExceptionが投げられます
EnumClass.values(): Array<EnumClass>        // 配列の形式で、エnum値を返します

エnumに関する情報を取得します:

val name: String //エnum名を取得します
val ordinal: Int //すべてのエnum配列で定義されたエnum値の順序を取得します

オンラインサンプル

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>() 関数はジェネリクスを使用してエnumクラスの定数にアクセスします :

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
}