Kotlin面向对象 (6)枚举类

  • 枚举类构造函数
  • 枚举常用属性和函数

kotlin 中使用 enumclass 两个关键词声明枚举类。

enum class 枚举类名 {
    枚举常量列表
}

枚举类使用案例:

enum class WeekDays {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

fun main(args: Array) {
    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) {
    val day = WeekDays.SUNDAY
    println(day)    // 星期日 - 6
}

注意:在枚举类中如果有其他属性或函数等成员时,枚举常量列表必须是类体中的第一行,而且语言结束一定不能省略分号 (;) 。

二、枚举常用属性和函数

  • ordinal 属性:返回枚举常量的顺序,这个顺序根据枚举常量声明的顺序而定,顺序从零开始。
  • values() 函数,返回一个包含全部枚举常量的数组。
  • valueOf(value: String) 函数,value 是枚举常量对应的字符串,返回一个包含枚举类型示例。
fun main(args: Array) {
    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

注意:代码中的 === 比较的是两个引用是否指向同一个对象,而 == 是比较对象内容是否相同。但是,对于枚举引用类型 ===== 是一样的,这也说明枚举类中每个枚举常量无论何时都只有一个实例,即是单例的。

你可能感兴趣的:(Kotlin面向对象 (6)枚举类)