# 枚舉類
大多數基本枚舉的用法是實現類型安全的枚舉
``` kotlin
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
```
每個枚舉常量都是一個對象。枚舉常量用逗號分隔。
## 初始化
由于每個枚舉都是枚舉類的實例,它們可以被初始化
``` kotlin
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
```
## 匿名類
枚舉常量還能聲明它們自己的匿名類
``` kotlin
enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}
```
用它們一致的方法覆蓋基類方法。注意如果這個枚舉類定義了成員,你需要用一個分號分隔枚舉常量定義和成員定義,與 Java 中一樣。
## 與枚舉常量一起工作
與 Java 一樣,Kotlin 中的枚舉類有合成方法允許列出已定義的枚舉常量并通過它的名稱得到一個枚舉常量。這些方法的簽名像下面這樣(假定枚舉類的名稱為 `EnumClass`):
``` kotlin
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
```
如果指定的名稱不能匹配到任何在類中定義的枚舉常量,`valueOf()` 方法會拋出一個 `IllegalArgumentException`。
每個枚舉常量都屬性來獲取它的名稱并在枚舉類聲明中定位:
``` kotlin
val name: String
val ordinal: Int
```
枚舉常量還實現了 [Comparable](/api/latest/jvm/stdlib/kotlin/-comparable/index.html) 接口,利用它們在枚舉類中定義的順序以正常地排序。