列挙型クラス (Enum Classes)

列挙型クラスの最も基本的な使用法は、型安全な列挙型を実装しています:

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 をスローします。

すべての列挙型定数は、列挙型クラス宣言でその名前と位置を取得するためのプロパティがあります。

val name: String
val ordinal: Int


列挙型定数は列挙型クラスで定義された順序である自然な順序で、Comparable インタフェースも実装します。