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类

前面小结说了,枚举类默认继承kotlin.Enum类,枚举类自然就可以使用继承的属性、方法

属性:

name:返回此枚举实例名称
ordinal:返回枚举值在枚举类中的索引值(第一个枚举值是0…以此类推)

方法:
int compareTo(E o):和同类型的枚举实例比较,比较的是枚举值索引,如果该枚举值位于指定枚举对象之前,返回整数,否则返回0

String toString():返回枚举常量名称

Kotlin1.1开始,提供了两个泛型方法:

EnumValues():获取所有枚举值数组
EnumValueOf(value:String):获取枚举实例

3、抽象枚举类

抽象枚举类不能使用"abstract"修饰,系统会自动为它添加abstract关键字;

我们说过枚举类需要显示创建枚举值,说以在定义枚举值是需要显示为抽象成员提供实现;
比如:

interface Output{
	fun output()
	}


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

		 override fun ouput() {
       
   		 }
    },

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

        }

		override fun ouput() {
       
    	}
    },
    TIMES {
        override fun evl(a: Int, b: Int):Int {
            return a*b
        }

		override fun ouput() {
       
    	}
    },MINUS {
        override fun evl(a: Int, b: Int):Int {
           return a-b
        }

		override fun ouput() {
       
    	}
    };

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




}

这里创建PLUS、MINUS枚举值,并不是直接创建Operator枚举类的实例,而是创建其子类的Operator的匿名子类的实例;

你可能感兴趣的:(Kotlin)