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

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

열거는 자신의 익명 클래스 및 관련 메서드를 선언하고 기본 클래스의 메서드를 override할 수 있습니다. 예를 들어:

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 출력
}