1. 程式人生 > >Kotlin筆記 第八章 (七)列舉類

Kotlin筆記 第八章 (七)列舉類

列舉類

1.1 成員

kotlin使用enum class關鍵字定義列舉類,可以實現一個或多個介面;

列舉類可以有自己的

屬性、

方法、

構造器(構造器只能使用private修飾符,省略則預設使用private);

1.1.1 屬性

列舉類屬性***只能是隻讀屬性***,因此該屬性必須在構造器或者初始化塊中指定(一般不會再定義時指定初始值,這樣每個例項屬性就一樣的,也就失去意義),因此,一般需要顯示定義帶引數的構造器;

Enum class Human(val name:String){
	Women("女"),Men("男");

}

如果列舉類沒有顯示定義構造器,可以直接列出列舉值,無須括號,如: Enum class Human{

		Women,Men

	}

列舉類預設繼承Kotlin.Enum類而不是Any類,因此,列舉類不能顯示在繼承其他類;而Enuml類實現了kotlin.Comparable介面

***非抽象列舉類不能使用open修飾符,因此非抽象列舉類不能派生子類,但可以實現0~N個介面;***當然同樣需要實現介面中的抽象方法

列舉類預設提供的兩個方法:

  1. EnumClass.valuesOf(value:String):EnumClass :根據列舉字串名獲取物件
  2. EnumClass.values():Array:獲取該列舉所有列舉值組成陣列

使用列舉類例項:

EnumClass.列舉值

2、Enum類

前面小結說了,列舉類預設繼承Enum類,列舉類自然就可以使用繼承的屬性、方法

屬性:

name:返回此列舉例項名稱 ordinal:返回列舉值在列舉類中的索引值(第一個列舉值是0…以此類推)

方法: int compareTo(E o):和同型別的列舉例項比較,比較的是列舉值索引,如果該列舉值位於指定列舉物件之前,返回整數,否則返回0

String toString():返回列舉常量名稱

Kotlin1.1開始,提供了兩個泛型方法:

EnumValues():獲取所有列舉值陣列 EnumValueOf(value:String):獲取列舉例項

3、抽象列舉類

抽象列舉類不能使用"abstract"修飾,系統會自動為它新增abstract關鍵字;

我們說過列舉類需要顯示建立列舉值,說以在定義列舉值是需要顯示為抽象成員提供實現; 比如:

enum  class Operator{
    PLUS {
        override fun evl(a: Int, b: Int):Int {
            return a+b
        }
    },

    DIV {
        override fun evl(a: Int, b: Int):Int {
            return a/b

        }
    },
    TIMES {
        override fun evl(a: Int, b: Int):Int {
            return a*b
        }
    },MINUS {
        override fun evl(a: Int, b: Int):Int {
           return a-b
        }
    };

    abstract fun evl(a:Int,b:Int): Int


}

這裡建立PLUS、MINUS列舉值,並不是直接建立Operator列舉類的例項,而是建立其子類的Operator的匿名子類的例項;