Kotlin中枚举
一、写一个Kotlin的枚举
package net.println.kotlin.chapter4
/**
* @author:wangdong
* @description:
*/
enum class LogLevel{
VERBOSE,DEBUG,INFO,WARN,ERROR,ASSERT
}
二、看一下字节码
三、看一下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()
}
}