<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # [枚舉類](https://www.w3cschool.cn/doc_kotlin/kotlin-api-latest-jvm-stdlib-kotlin--enum-index.html) ~~~ abstract class Enum<E?:?Enum<E>>?:?Comparable<E> ~~~ [TOC] **枚舉類的最基本的用法是實現類型安全的枚舉**: * 枚舉常量:即枚舉類下的對象,每個枚舉類包含0個到多個枚舉常量。`enum`關鍵字在類頭中的`class`關鍵字前面。 ```kotlin enum class Direction { NORTH, SOUTH, WEST, EAST } ``` * **每個枚舉常量都是一個對象,且枚舉常量之間用逗號分隔。** * **不需要實例化枚舉類就可以訪問枚舉常量** * 使用方式:`枚舉類名.枚舉常量.屬性` ``` // 使用中綴符號訪問枚舉常量 Direction.NORTH.name Direction.SOUTH.name Direction.WEST.name Direction.EAST.name ``` ## 初始化 **因為每一個枚舉都是枚舉類的實例**,所以他們可以是這樣初始化過的: ```kotlin enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF) } ``` ## 匿名類 枚舉常量還可以聲明其帶有相應方法以及覆蓋了其基類方法的匿名類。(注意**是匿名類,而不是匿名內部類**) * 就是**枚舉類的常量可以同時看成是一個同名匿名類** * 枚舉常量支持枚舉類,支持重載父類的方法,枚舉常量匿名類規則和常量一致,但常量匿名類和父類的其它分量要用";"隔開 * **要實現枚舉常量的匿名類**,則必須提供一個抽象方法(必須重寫的方法)。且該方法定義在枚舉類內部。而且必須在枚舉常量的后面。 * 枚舉變量之間使用逗號(`,`)分割開。但是最后一個枚舉常量必須使用分號結束。不然定義不了抽象方法。 ```kotlin enum class ProtocolState { //枚舉常量WAITING可看做一個同名匿名類 WAITING { override fun signal() = TALKING }, //枚舉常量TALKING可看做一個同名匿名類 TALKING { override fun signal() = WAITING }; abstract fun signal(): ProtocolState } ``` 測試 ~~~ fun main(args: Array<String>) { val ev: ProtocolState = ProtocolState.WAITING println(ev.signal()) } ~~~ 運行結果 ``` TALKING ``` 如果枚舉類定義任何成員,那么使用分號將成員定義中的枚舉常量定義分隔開。 枚舉條目不能包含內部類以外的嵌套類型(已在 Kotlin 1.2 中棄用)。 示例: ``` fun main(args: Array<String>) { ConsoleColor.BLACK.print() } enum class ConsoleColor(var argb : Int){ RED(0xFF0000){ override fun print() { println("我是枚舉常量 RED ") } }, WHITE(0xFFFFFF){ override fun print() { println("我是枚舉常量 WHITE ") } }, BLACK(0x000000){ override fun print() { println("我是枚舉常量 BLACK ") } }, GREEN(0x00FF00){ override fun print() { println("我是枚舉常量 GREEN ") } }; abstract fun print() } ``` 運行結果 ``` 我是枚舉常量 BLACK ``` ## 在枚舉類中實現接口 **一個枚舉類可以實現接口但不能從類繼承(實現接口,繼承類都是用冒號表示)**,可以為所有條目提供統一的接口成員實現,也可以在相應匿名類中為每個條目提供各自的實現。只需將接口添加到枚舉類聲明中即可,如下所示: ```kotlin import java.util.function.BinaryOperator import java.util.function.IntBinaryOperator //sampleStart enum class IntArithmetics : BinaryOperator<Int>, IntBinaryOperator { PLUS { override fun apply(t: Int, u: Int): Int = t + u }, TIMES { override fun apply(t: Int, u: Int): Int = t * u }; override fun applyAsInt(t: Int, u: Int) = apply(t, u) } //sampleEnd fun main() { val a = 13 val b = 31 for (f in IntArithmetics.values()) { println("$f($a, $b) = ${f.apply(a, b)}") } } ``` ## 使用枚舉常量 **示例** ~~~ enum class Color(var argb: Int) { RED(0xFF0000), WHITE(0xFFFFFF), BLACK(0x000000), GREEN(0x00FF00) } fun main(args: Array<String>) { //訪問枚舉變量屬性 println("使用枚舉常量") println("--------訪問枚舉變量屬性--------") println("name = " + Color.RED.name + "\tordinal = " + Color.RED.ordinal) println("name = " + Color.WHITE.name + "\tordinal = " + Color.WHITE.ordinal) println("name = " + Color.BLACK.name + "\tordinal = " + Color.BLACK.ordinal) println("name = " + Color.GREEN.name + "\tordinal = " + Color.GREEN.ordinal) //使用valueOf()和values()檢測 println("--------使用valueOf()和values()檢測--------") println(Color.valueOf("RED")) println(Color.values()[0]) println(Color.values()[1]) println(Color.values()[2]) println(Color.values()[3]) //使用enumValues<T>()和 enumValueOf<T>()訪問 println("--------使用enumValues<T>()和 enumValueOf<T>()訪問--------") println(enumValues<Color>().joinToString { it.name }) println(enumValueOf<Color>("RED")) } ~~~ 運行結果 ``` 使用枚舉常量 --------訪問枚舉變量屬性-------- name = RED ordinal = 0 name = WHITE ordinal = 1 name = BLACK ordinal = 2 name = GREEN ordinal = 3 --------使用valueOf()和values()檢測-------- RED RED WHITE BLACK GREEN --------使用enumValues<T>()和 enumValueOf<T>()訪問-------- RED, WHITE, BLACK, GREEN RED ``` Kotlin 中的枚舉類也有合成方法允許列出定義的枚舉常量以及通過名稱獲取枚舉常量。這些方法的簽名如下(假設枚舉類的名稱是 `EnumClass`): ```kotlin EnumClass.valueOf(value: String): EnumClass EnumClass.values(): Array<EnumClass> ``` 如果指定的名稱與類中定義的任何枚舉常量均不匹配,`valueOf()` 方法將拋出 `IllegalArgumentException` 異常。 如:我們在上面示例中,`println(Color.valueOf("RED"))`下面添加`println(Color.valueOf("BLUE"))`運行IDE,控制臺就會報錯如下: ![](https://img.kancloud.cn/d6/6b/d66b4e5ae40a01f2349a9b2e0102f607_1100x205.png) 自 Kotlin 1.1 起,可以使用 `enumValues<T>()` 與 `enumValueOf<T>()` 函數以泛型的方式訪問枚舉類中的常量: ```kotlin enum class RGB { RED, GREEN, BLUE } inline fun <reified T : Enum<T>> printAllValues() { print(enumValues<T>().joinToString { it.name }) } printAllValues<RGB>() // 輸出 RED, GREEN, BLUE ``` 每個枚舉常量都具有在枚舉類聲明中獲取其名稱與位置的屬性: ```kotlin val name: String val ordinal: Int ``` 枚舉常量還實現了 [Comparable](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-comparable/index.html) 接口,其中自然順序是它們在枚舉類中定義的順序。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看