Enum 클래스
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
각 열거형 상수는 객체이다
초기화
각 enum은 enum 클래스의 인스턴스이므로, 초기화 가능
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
무명 클래스
Enum 상수는 무명 클래스를 선언 가능
enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}
각자 대응하는 메소드, 오버라이드한 기본 메소드도뿐만 아니라 선언 가능
enum 상수 사용하여 작업
enum 클래스는 정의된 enum 타입 상수를 나열, 이름으로 enum 타입 상수를 얻을 수 있다
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
valueOf()
메소드에 지정한 enum 상수가 없는 경우 IllegalArgumentException
예외 발생
Kotlin 1.1 부터 enumValues<T>()
및 enumValueOf<T>()
함수를 사용하여 enum 클래스의 상수에 접근 가능
enum class RGB { RED, GREEN, BLUE }
inline fun <reified T : Enum<T>> printAllValues() {
print(enumValues<T>().joinToString { it.name })
}
printAllValues<RGB>() // RED, GREEN, BLUE 출력
모든 enum 상수는 상수의 이름과 enum 클래스에 정의된 순서를 구할 수 있는 프로퍼티를 가진다
val name: String
val ordinal: Int
enum 클래스로 정의된 순서를 자연 순서로서, Comparable 인터페이스를 구현하고 있다