Kotlin 全面學習之路 (十二) --列舉類
阿新 • • 發佈:2018-12-12
在對 密封類 的學習過程中我們知道兩者之間有所相同,那就具體學習一下 Kotlin 中的列舉類。
1. 基本實現
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
每一個列舉常量都是一個物件,列舉常量間使用逗號分隔。
2. 列舉初始化
enum class OzWitch(val des: String) {
WEST("west"),
NORTH("north"),
EAST("east"),
SOUTH("south");
}
列舉類的每一個列舉常量都是列舉類的例項,所以可以如上所示通過 建構函式 進行初始化。
3. 向列舉類中新增方法
除了不能繼承一個 enum 外,我們基本可以把 enum 看作一個常規的類,我們可以向 enum 新增方法。
enum class OzWitch(var des: String) {
WEST("west"),
NORTH("north"),
EAST("east"),
SOUTH("south");
fun allData(): String? {
for (it in values())
des += it
return des
}
}
具體呼叫:
object Main { @JvmStatic fun main(args: Array<String>) { for(it in OzWitch.values()){ println(it) println(it.allData()) } } }
正常列印日誌如下:
WEST
westWESTNORTHEASTSOUTH
NORTH
northWESTNORTHEASTSOUTH
EAST
eastWESTNORTHEASTSOUTH
SOUTH
southWESTNORTHEASTSOUTH
從列印結果來看,每一個列舉常量例項都會呼叫相同的方法、行為(其具體邏輯也是相同的)。
如何載入自己的邏輯?有兩種方法:
- 匿名類
- 介面實現
4. 匿名類
列舉類常量可以宣告自己的匿名類:
- OzWitch
enum class OzWitch(var des: String) { WEST("west") { override fun showDes() { println("i am ${des}") } }, NORTH("north") { override fun showDes() { println("i am ${des}") } }, EAST("east") { override fun showDes() { println("i am ${des}") } }, SOUTH("south") { override fun showDes() { println("i am ${des}") } }; abstract fun showDes() }
- Main
object Main {
@JvmStatic
fun main(args: Array<String>) {
for(it in Location.values()){
println(it)
it.setStr()
}
}
}
- 列印日誌
NORTH
i am north
SOUTH
i am south
EAST
i am east
WEST
i am west
列舉類的每個例項物件都執行了自己相應的方法邏輯。
5.列舉實現介面
- Info
interface Info {
fun showInfo():String
}
- OzWitch
enum class OzWitch(var des: String):Info {
WEST("west") {
override fun showInfo(): String {
return "i am ${des}"
}
},
EAST("east") {
override fun showInfo(): String {
return "i am ${des}"
}
},
SOUTH("south") {
override fun showInfo(): String {
return "i am ${des}"
}
},
NORTH("north") {
override fun showInfo(): String {
return "i am ${des}"
}
};
}
- Main
object Main {
@JvmStatic
fun main(args: Array<String>) {
for(it in OzWitch.values()){
println(it)
println(it.showInfo())
}
}
}
- 日誌列印
WEST
i am west
EAST
i am east
SOUTH
i am south
NORTH
i am north
列舉類的每個例項物件都執行了自己相應的方法邏輯。