Kotlin学习笔记之 11 枚举类

1,854 阅读1分钟

首发于公众号: DSGtalk1989

11.Kotlin 枚举类

  • 枚举类初始化

    关键字是enum,kotlin中的枚举类初始化可以有参数,比如:

    enum class Shape(value:Int){
         ovel(100),
         rectangle(200)
     }
    

    我们习惯性的会将枚举对象大写,但实际上不一定需要。

    并且这里我们会将破天荒的第一次在kotlin中去使用分号;,它主要用来区分枚举对象和成员函数的

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

    枚举对象内部也可以直接加入方法。

  • 静态方法values和valueOf,和属性name,ordinal

    values方法返回的是枚举类数组,会遍历枚举常量。valuesOf会直接返回相应字符串对应的枚举对象。

    name顾名思义就是枚举类的名字,ordinal是对象所在的index0开始

    println(Color.valueOf("RED")
    for(color in Color.values()){
         println(color.name)
         println(color.ordinal)
     }
    
  • enumValues() 和 enumValueOf()

    直接使用泛型的方式访问枚举类中的常量

    inline fun <reified T : Enum<T>> printAllValues() {
         print(enumValues<T>().joinToString { it.name })
     }	
     
     fun main(args: Array<String>) {
         printAllValues<RGB>() // 输出 RED, GREEN, BLUE
     }
    

    里面涉及到的inlinereified我们之后说