Kotlin學習筆記(十)【枚舉】

Kotlin枚舉類

枚舉類最基本的方法就是實現一個類型安全的枚舉。
枚舉常量用逗號分隔,每一個枚舉都是一個對象。

enum class Color {
    RED,
    BLACK,
    WHITE
}

枚舉初始化

每一個枚舉都是枚舉類實例,都可以被初始化

enum class Color(val rgb: Int) {
    RED(0xFF0000),
    BLACK(0x000000),
    WHITE(0xFFFFFF)
}

默認名稱爲枚舉字符名,值從0開始。若需要指定值,則可以使用其構造函數:

enum class Shape(value: Int){
    OVAL(100),
    RECTANGLE(200)
}

枚舉還支持以聲明自己的匿名類及相應的方法、以及覆蓋基類的方法。如:

enum class ProtocolState {
    WAITING {
        override fun signal() = WAITING
    },
    TALKING {
        override fun signal(): ProtocolState {
            return TALKING
        }
    };
    abstract fun signal(): ProtocolState
}

如果枚舉類定義任何成員,要使用分號將成員定義中的枚舉常量定義分隔開

使用枚舉常量

Kotlin 中的枚舉類具有合成方法,允許遍歷定義的枚舉常量,並通過其名稱獲取枚舉常數。

EnumClass.valueOf(value: String): EnumClass  // 轉換指定 name 爲枚舉值,若未匹配成功,會拋出IllegalArgumentException
EnumClass.values(): Array<EnumClass>        // 以數組的形式,返回枚舉值

獲取枚舉相關信息:

val name: String //獲取枚舉名稱
val ordinal: Int //獲取枚舉值在所有枚舉數組中定義的順序

實例:

fun main(args: Array<String>) {
    val mColor = Color.BLACK
    println(Color.values())
    println(Color.valueOf("BLUE"))
    println(mColor.name)
    println(mColor.ordinal)
}

打印結果
[Lcom.qfxl.kotlin.Color;@3dee2310
BLUE
BLACK
1

自 Kotlin 1.1 起,可以使用 enumValues() 和 enumValueOf() 函數以泛型的方式訪問枚舉類中的常量 :

fun main(args: Array<String>) {
    printAll<Color>()
}

inline fun <reified T : Enum<T>> printAll() {
    println(enumValues<T>().joinToString { it.name })
}

enum class Color {
    RED,
    BLACK,
    BLUE
}

輸出結果
RED, BLACK, BLUE

發佈了75 篇原創文章 · 獲贊 127 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章