Kotlin中枚举

一、写一个Kotlin的枚举

package net.println.kotlin.chapter4

/**
 * @author:wangdong
 * @description:
 */
enum class LogLevel{
    VERBOSE,DEBUG,INFO,WARN,ERROR,ASSERT
}

二、看一下字节码
Kotlin中枚举

三、看一下kotlin反编译成Java的代码

package net.println.kotlin.chapter4;

import kotlin.Metadata;

@Metadata(
   mv = {1, 1, 9},
   bv = {1, 0, 2},
   k = 1,
   d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0010\n\u0002\b\b\b\u0086\u0001\u0018\u00002\b\u0012\u0004\u0012\u00020\u00000\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002j\u0002\b\u0003j\u0002\b\u0004j\u0002\b\u0005j\u0002\b\u0006j\u0002\b\u0007j\u0002\b\b¨\u0006\t"},
   d2 = {"Lnet/println/kotlin/chapter4/LogLevel;", "", "(Ljava/lang/String;I)V", "VERBOSE", "DEBUG", "INFO", "WARN", "ERROR", "ASSERT", "production sources for module chapter4_main"}
)
public enum LogLevel {
   VERBOSE,
   DEBUG,
   INFO,
   WARN,
   ERROR,
   ASSERT;
}

三、枚举
实例可数的类,注意枚举也是类
可以修改构造,添加成员
可以提高代码的表现性,但是也会有一定的消耗(可以忽略不计)
看一个kotlin的枚举类

package net.println.kotlin.chapter4

/**
 * @author:wangdong
 * @description:kotlin枚举
 */
enum class LogLevel(val id: Int){
    VERBOSE(0),DEBUG(1),INFO(2),WARN(3),ERROR(4),ASSERT(5);
    //定义方法的时候,需要和上面的一行用分号隔开
    fun getTag(): String{
        return "$id,$name"
    }

    override fun toString(): String {
        return "$name,$ordinal"
    }
}

fun main(args: Array<String>) {
    println(LogLevel.DEBUG.getTag())  //1,DEBUG
    LogLevel.values().map(::println)    //VERBOSE,0DEBUG,1INFO,2WARN,3ERROR,4ASSERT,5
    println(LogLevel.valueOf("ERROR"))
}

/**写一个带构造器的类*/
class LogLevel2 protected constructor(){

    //伴生对象
    companion object {
        val VERBOSE = LogLevel2()
        val DEBUG = LogLevel2()
        val INFO = LogLevel2()
        val WARN = LogLevel2()
        val ERROR = LogLevel2()
    }
}