- 枚舉類構(gòu)造函數(shù)
- 枚舉常用屬性和函數(shù)
kotlin 中使用 enum 和 class 兩個關(guān)鍵詞聲明枚舉類。
enum class 枚舉類名 {
枚舉常量列表
}
枚舉類使用案例:
enum class WeekDays {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
fun main(args: Array<String>) {
val day = WeekDays.SUNDAY
println(day) // SUNDAY
when(day) {
WeekDays.MONDAY -> println("星期一")
WeekDays.TUESDAY -> println("星期二")
WeekDays.WEDNESDAY -> println("星期三")
WeekDays.THURSDAY -> println("星期四")
WeekDays.FRIDAY -> println("星期五")
else -> println("Happy Day")
}
}
// 結(jié)果
SUNDAY
Happy Day
一佛舱、枚舉類構(gòu)造函數(shù)
- 枚舉類可以像其他類一樣包含屬性和函數(shù)椎例,可以通過構(gòu)造函數(shù)初始化屬性挨决。
enum class WeekDays(val wname: String, var index: Int) {
MONDAY("星期一", 0),
TUESDAY("星期二", 1),
WEDNESDAY("星期三", 2),
THURSDAY("星期四", 3),
FRIDAY("星期五", 4),
SATURDAY("星期六", 5),
SUNDAY("星期日", 6);
override fun toString() = "$wname - $index"
}
fun main(args: Array<String>) {
val day = WeekDays.SUNDAY
println(day) // 星期日 - 6
}
注意:在枚舉類中如果有其他屬性或函數(shù)等成員時脖祈,枚舉常量列表必須是類體中的第一行,而且語言結(jié)束一定不能省略分號 (;) 。
二、枚舉常用屬性和函數(shù)
- ordinal 屬性:返回枚舉常量的順序邮破,這個順序根據(jù)枚舉常量聲明的順序而定彤蔽,順序從零開始镊辕。
- values() 函數(shù)揩悄,返回一個包含全部枚舉常量的數(shù)組。
- valueOf(value: String) 函數(shù),value 是枚舉常量對應(yīng)的字符串幸缕,返回一個包含枚舉類型示例。
fun main(args: Array<String>) {
val allValues = WeekDays.values()
allValues.forEach {
println("[ordinal: ${it.ordinal}, value: $it]")
}
val day1 = WeekDays.FRIDAY
val day2 = WeekDays.valueOf("FRIDAY")
println(day1 === WeekDays.FRIDAY) // true
println(day1 == WeekDays.FRIDAY) // true
println(day1 === day2) // true
}
2019-05-30 16:55:19.329 25984-25984/cn.ak.kot I/System.out: [ordinal: 0, value: 星期一 - 0]
2019-05-30 16:55:19.329 25984-25984/cn.ak.kot I/System.out: [ordinal: 1, value: 星期二 - 1]
2019-05-30 16:55:19.329 25984-25984/cn.ak.kot I/System.out: [ordinal: 2, value: 星期三 - 2]
2019-05-30 16:55:19.329 25984-25984/cn.ak.kot I/System.out: [ordinal: 3, value: 星期四 - 3]
2019-05-30 16:55:19.329 25984-25984/cn.ak.kot I/System.out: [ordinal: 4, value: 星期五 - 4]
2019-05-30 16:55:19.329 25984-25984/cn.ak.kot I/System.out: [ordinal: 5, value: 星期六 - 5]
2019-05-30 16:55:19.330 25984-25984/cn.ak.kot I/System.out: [ordinal: 6, value: 星期日 - 6]
2019-05-30 16:55:19.336 25984-25984/cn.ak.kot I/System.out: true
2019-05-30 16:55:19.340 25984-25984/cn.ak.kot I/System.out: true
2019-05-30 16:55:19.340 25984-25984/cn.ak.kot I/System.out: true
注意:代碼中的 === 比較的是兩個引用是否指向同一個對象抬虽,而 == 是比較對象內(nèi)容是否相同。但是,對于枚舉引用類型 === 和 == 是一樣的,這也說明枚舉類中每個枚舉常量無論何時都只有一個實(shí)例围来,即是單例的。