Kotlin面向对象 (6)枚举类
2019-05-30 本文已影响0人
狼性代码人
- 枚举类构造函数
- 枚举常用属性和函数
kotlin 中使用 enum 和 class 两个关键词声明枚举类。
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")
}
}
// 结果
SUNDAY
Happy Day
一、枚举类构造函数
- 枚举类可以像其他类一样包含属性和函数,可以通过构造函数初始化属性。
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
}
注意:在枚举类中如果有其他属性或函数等成员时,枚举常量列表必须是类体中的第一行,而且语言结束一定不能省略分号 (;) 。
二、枚举常用属性和函数
- ordinal 属性:返回枚举常量的顺序,这个顺序根据枚举常量声明的顺序而定,顺序从零开始。
- values() 函数,返回一个包含全部枚举常量的数组。
- valueOf(value: String) 函数,value 是枚举常量对应的字符串,返回一个包含枚举类型示例。
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
注意:代码中的 === 比较的是两个引用是否指向同一个对象,而 == 是比较对象内容是否相同。但是,对于枚举引用类型 === 和 == 是一样的,这也说明枚举类中每个枚举常量无论何时都只有一个实例,即是单例的。