Kotlin 枚举类

kotlin 中也如Java一样,有枚举类这个类型。
枚举类的定义:在某些情况下,一个类的是有限而且固定的,比如季节类、月份类、等等,这种实例有限而且固定的类,叫做枚举类。
作用:在早期代码中,可能会使用静态常量表示枚举,比如下面定义的常量:

	//申请手机状态的权限的 回执码
    var REQUEST_READ_PHONE_STATE: Int = 1001
	//申请手机存储权限的 回执码
    var REQUEST_READ_EXTERNAL_STORAGE: Int = 1002

以上声明的方法简单明了,但是会有几个问题:

  • 类型不安全:
  • 没有命名空间:在定义的时候,必须要加上 类似“SEASON_”的关键字进行定义,否则可能会和程序的其他常量混淆使用。
  • 打印输出的意义不明确:比如当输出 REQUEST_READ_PHONE_STATE 时,实际输出的值未 1001,无法见值知意

通过定义普通类来实现枚举的话,缺点明显,代码量变大,实现起来就很麻烦了。

Java 在JDK1.5后就增加了枚举类的支持。

枚举类的关键字为enum,声明方式:

enum class clazzName{

}

枚举类和 普通类的几个简单的区别:

  • 枚举类可以实现一个或者多个接口,使用enum定义的枚举类 默认继承了 java.lang.Enum类,而不是默认继承Object类,因此枚举类不能显式继承其他父类,其中 java.lang.Enum类实现了 Serializable和Comparable两个接口。
  • 使用enum定义的枚举类,默认会使用final关键字进行修饰,因此枚举类不能派生子类。
  • 枚举类的构造函数只能使用private修饰,无论是否指定,都是只能使用private访问修饰符。
  • 枚举类的所有实例必须在第一行全部显式列出,否则这个枚举类永远都不会产生实例,在列出实例之后,系统会默认添加 pubulic static final 修饰,无需我们手动添加。

枚举类默认是提供了 values()方法,可以很方便遍历出所有的枚举值。

枚举类可以实现多个接口的同时,也可以包含抽象方法。

下面举一个,实现一个接口,并包含了一个抽象方法的枚举类案例:

//定义一个 枚举类,实现一个接口
enum class EnumWeeks : EnumInterface {
	//实现接口后,默认是每个实例都实现此接口方法
    Monday("星期一") {
        override fun printValue() {
            println("你好,我是${getValue()}")
        }
  
        override fun doSomething() {
            println("你好,我是周一")
        }
    },
    Tuesday("星期二") {
        override fun printValue() {
         	println("你好,我是${getValue()}")
        }
        override fun doSomething() {
            println("你好,我是周二")
        }
    };
	
    private var value: String = ""
	//构造函数,使用private修饰
    private constructor(value: String) {
        this.value = value
    }
	//获取枚举类 实例的 值
    fun getValue(): String {
        return value
    }
    
    //定义的抽象方法
    abstract fun printValue()
}
//程序入口
fun main(args: Array<String>) {
    println(EnumWeeks.Monday.getValue())
    EnumWeeks.Monday.doSomething()
}

接口EnumInterface如下:

//定义一个接口
interface EnumInterface {
    fun doSomething()
}

运行程序:打印信息如下:

星期一
你好,我是周一
你好,我是星期一

Process finished with exit code 0

以上是枚举类的部分介绍和部分使用方法的简单介绍,不正请指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值