Kotlin學習之-5.10 枚舉類

Kotlin學習之-5.10 枚舉類

使用枚舉類最基本的方法是實現類型安全的枚舉:

enum class Direction {
    NORTH, SOUTH, WEST, EAST
}

每一個枚舉常量都是一個對象。枚舉常量使用逗號分隔開

初始化

由於每個枚舉都是一個枚舉類的實例,所以他們可以被初始化:

enum class Color(val rgb: Int) {
    RED(0xFF0000),
    GREEN(0x00FF00),
    BLUE(0x0000FF)
}

匿名類

每個枚舉常量也可以定義他們自己的匿名類:

enum class ProtocolState {
    WAITING {
        override fun singal() = TALKING
    },

    TALKING {
        override fun singal() = WAITING
    };

    abstract fun singal(): ProtocolState
}

用他們自己對應的方法並且複寫基礎方法。注意如果枚舉類定義任何成員,你需要使用封號;來分隔每個成員的定義,這和Java很像

使用枚舉常量

和Java很像,Kotlin中的枚舉類也有方法可以列出定義的枚舉常量,並且通過名字得到枚舉常量的值。這些函數的簽名如下(假設枚舉類的名字是EnumClass

EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>

如果指定的名字無法匹配到任何類中定義的枚舉,那麼valueOf()方法會拋出IllegalArgumentException異常
從Kotlin v1.1之後,可以使用泛型的方式來訪問枚舉,用enumValues<T>()enumValueOf<T>() 這兩個方法

enum class RGB { RED, GREEN, BLUE }

inline fun <refied T : Enum<T>> printAllValues() {
    print(enumValues<T>().joinToString { it.name })
}

printAllValues<RGB>()

每個枚舉常量在枚舉類的定義中都有用來存儲名字和位置的屬性:

val name: String
val ordinal: Int

枚舉常量也可以實現Comparable接口,使用自然順序作爲枚舉類中定義的順序。


PS,我會堅持把這個系列寫完,有問題可以留言交流,也關注專欄Kotlin for Android Kotlin安卓開發

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章