Kotlin枚举类

枚举类最基本的用法是实现一个类型安全的枚举(typesafe enum),什么叫做类型安全的枚举呢,即每个枚举都是枚举类的实例且不提供公共的构造方法。

enum class Color{
    RED, GREEN, BLUE, WHITE, BLACK
}

枚举类使用关键字enum标记,enum关键字在类头中的class关键字前面。

enum class 类名{
  ...
}

枚举常量

  • 枚举常量是指枚举类下的对象,每个枚举类包含0到多个枚举常量。
  • 枚举常量使用逗号分隔,每个枚举常量都是一个对象。
  • 枚举类中的每个枚举常量都是一个对象,枚举常量之间使用逗号分隔。
  • 枚举常量也可以被定义在自己的匿名类中
  • 每个枚举都是枚举类的实例,都可以被初始化。

根据枚举值的名称获取枚举实例

EnumClass.valueOf(value:String)

获取所有枚举实例

EnumClass.values()

例如:

//定义枚举类
enum class LogLevel{
    VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT
}
//测试运行
fun main(args:Array){
    val level:LogLevel = LogLevel.DEBUG
    println(level.name)//DEBUG
    println(level.ordinal)//1

    println(LogLevel.values())//[LLogLevel;@6e8cf4c6
    println(LogLevel.valueOf("ERROR"))//ERROR

    println(LogLevel.ERROR)//ERROR
    println(LogLevel.ERROR.ordinal)//4
    println(LogLevel.ERROR.name)//ERROR
}
  • 每个枚举常量都拥有属性,可以获取它的名称name以及它在枚举类中声明的顺序ordinal
  • 枚举类的著构造函数默认是私有的,若对枚举常量设置属性值,需在主构造函数会中进行声明,并且在枚举常量处进行初始化。

例如:

//定义枚举类
enum class LogLevel(var type:Int){
    VERBOSE(1),
    DEBUG(2),
    INFO(3),
    WARN(4),
    ERROR(5),
    ASSERT(6)
}
//测试运行
fun main(args:Array){
    val levels:Array = LogLevel.values()
    for(item in levels){
        println("name:${item.name} ordinal:${item.ordinal} type:${item.type} value:${LogLevel.valueOf(item.name)}")
    }
}

你可能感兴趣的:(Kotlin枚举类)