Kotlin Enum Class (列舉類別)

Enum (列舉) 用來定義一組 固定的常數。 Kotlin 的 Enum 本身就是一個 Class,所以它可以有屬性和方法。

基本用法

最簡單的例子,定義方向、狀態等。

enum class Direction {
    NORTH, SOUTH, WEST, EAST
}

使用時:

val dir = Direction.NORTH

if (dir == Direction.NORTH) {
    println("Go North!")
}

Enum 帶屬性與方法

因為 Enum 是類別,我們可以給每個常數賦值。

enum class Color(val rgb: Int) {
    RED(0xFF0000),
    GREEN(0x00FF00),
    BLUE(0x0000FF); // 如果後面有定義方法,這裡必須要加分號

    fun containsRed(): Boolean {
        return (rgb and 0xFF0000) != 0
    }
}

fun main() {
    val color = Color.RED
    println(color.rgb) // 16711680
}

常用方法

每個 Enum 類別自動擁有以下方法:

  • name: 常數名稱 (String)。
  • ordinal: 順序索引 (Int, 從 0 開始)。
  • values(): 取得所有常數的陣列。
  • valueOf("NAME"): 根據名稱取得 Enum 常數。
for (d in Direction.values()) {
    println("${d.name} : ${d.ordinal}")
}
// 輸出:
// NORTH : 0
// SOUTH : 1
// ...
從 Kotlin 1.9 開始,推薦使用 entries 屬性來取代 values(),效能更好。

匿名類別實作

Enum 常數甚至可以分別實作抽象方法。

enum class Protocol {
    HTTP {
        override fun signal() = println("Using HTTP")
    },
    HTTPS {
        override fun signal() = println("Using Secure HTTPS")
    };

    abstract fun signal()
}