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