Kotlin學習之枚舉類

枚舉類最基本的用法是實現一個類型安全的枚舉。

什麼叫類型安全的枚舉類呢?

在java中像Color裏面就有很常見的:Color.BLACK,Color.WHITE之類的,像Color的這種設計就被稱作“類型安全枚舉(typesafe enum)”,每一個枚舉都是這個枚舉類的實例而且不提供公共的構造方法。

在kotlin中:
eg:

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

枚舉常量用逗號分開。

枚舉初始化:

每一個枚舉都是枚舉類的實例,它們可以被初始化:
eg:

enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}

匿名類

枚舉常量也可以被定義在他們自己的匿名類裏。
eg:

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

與它對應的方法還有重寫基方法。注意,和java一樣,枚舉類定義了任何成員,都要將成員和枚舉常量用分號隔開。
eg:

enum class Direction {
NORTH, SOUTH, WEST, EAST ;
var i:Int=7;
}

使用枚舉常量

和java一樣,kotlin中的枚舉類可以通過合成方法來列出定義了的枚舉常量而且通過它的名字來獲取枚舉常量。這些方法的簽名如下(假設枚舉類的名字就是EnumClass):

EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>

當枚舉類中沒有找到指定的枚舉常量名的時候,valueOf會拋出IllegalArgumentException
在枚舉類的聲明中每個枚舉常量都有屬性去獲取它的名字和位置。

val name: String
val ordinal: Int

枚舉常量也實現了Comparable接口,在枚舉類中定義枚舉常量時用自然順序做爲順序。

每日一補:在kotlin中用when代替了switch分支,這個風格與c就很像了,用法如下:

when (x) {
1 -> print(“x == 1”)
2 -> print(“x == 2”)
else -> { // Note the block
print(“x is neither 1 nor 2”)
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章