Kotlin-17.列舉類(enum class)

weixin_33850890發表於2017-08-07

官方文件: http://kotlinlang.org/docs/reference/enum-classes.html

1.列舉類(enum class)

列舉類(enum class)基本用法,特性,和java差不多:
    enum class Direction {
        //每個列舉常量(Enum Constants)都是一個物件,用逗號分隔
        NORTH, SOUTH, WEST, EAST
    }

2.初始化(Initialization)

因為每個列舉常量都是一個物件,所以都有初始化:
    enum class Color(val rgb: Int) {
            RED(0xFF0000),
            GREEN(0x00FF00),
            BLUE(0x0000FF)
    }

3.匿名類(Anonymous Classes)

每個列舉常量都能宣告匿名類:
    enum class ProtocolState {            
        WAITING {
            override fun signal() = TALKING
        },
        TALKING {
            override fun signal() = WAITING                
        }; //注意:像Java一樣,Kotlin列舉常量也需要分號;分隔!

        abstract fun signal(): ProtocolState
    }

4.使用列舉常量(Enum Constants)

像Java一樣,Kotlin列舉類也有合成方法,允許訪問列舉常量:
    enum class RGB { 
        RED, GREEN, BLUE 
    }
    //通過名字獲取列舉常量
    RGB.valueOf(value: String): EnumClass
    //獲取列舉常量列表
    RGB.values(): Array<EnumClass>        

自Kotlin 1.1起,可用enumValues<T>()和enumValueOf<T>() 以泛型方式訪問列舉常量:
    enum class RGB { 
        RED, GREEN, BLUE 
    }
    inline fun <reified T : Enum<T>> printAllValues() {
        print(enumValues<T>().joinToString { it.name })
    }
    printAllValues<RGB>() //輸出 RED, GREEN, BLUE

像Java一樣,每個列舉常量都有兩個屬性-宣告名字和宣告位置:
    val name: String
    val ordinal: Int

列舉常量也實現了Comparable介面, 其中自然順序(natural order)是在列舉類中的定義順序!

簡書:http://www.jianshu.com/p/6af7998af8d1
CSDN部落格: http://blog.csdn.net/qq_32115439/article/details/73692421
GitHub部落格:http://lioil.win/2017/06/24/Kotlin-enum-classes.html
Coding部落格:http://c.lioil.win/2017/06/24/Kotlin-enum-classes.html

相關文章