Kotlin学习之枚举类

Posted 扈扈哈嘿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin学习之枚举类相关的知识,希望对你有一定的参考价值。

枚举类最基本的用法是实现一个类型安全的枚举。

什么叫类型安全的枚举类呢?

在java中像Color里面就有很常见的:Color.BLACK,Color.WHITE之类的,像Color的这种设计就被称作“类型安全枚举(typesafe enum)”,每一个枚举都是这个枚举类的实例而且不提供公共的构造方法。

在kotlin中:
eg:

enum class Direction
NORTH, SOUTH, WEST, EAST

枚举常量用逗号分开。

枚举初始化:

每一个枚举都是枚举类的实例,它们可以被初始化:
eg:

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

匿名类

枚举常量也可以被定义在他们自己的匿名类里。
eg:

enum class ProtocolState
WAITING
override fun signal() = TALKING
,
TALKING
override fun signal() = WAITING
;
abstract fun signal(): ProtocolState

与它对应的方法还有重写基方法。注意,和java一样,枚举类定义了任何成员,都要将成员和枚举常量用分号隔开。
eg:

enum class Direction
NORTH, SOUTH, WEST, EAST ;
var i:Int=7;

使用枚举常量

和java一样,kotlin中的枚举类可以通过合成方法来列出定义了的枚举常量而且通过它的名字来获取枚举常量。这些方法的签名如下(假设枚举类的名字就是EnumClass):

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

当枚举类中没有找到指定的枚举常量名的时候,valueOf会抛出IllegalArgumentException
在枚举类的声明中每个枚举常量都有属性去获取它的名字和位置。

val name: String
val ordinal: Int

枚举常量也实现了Comparable接口,在枚举类中定义枚举常量时用自然顺序做为顺序。

每日一补:在kotlin中用when代替了switch分支,这个风格与c就很像了,用法如下:

when (x)
1 -> print(“x == 1”)
2 -> print(“x == 2”)
else -> // Note the block
print(“x is neither 1 nor 2”)

以上是关于Kotlin学习之枚举类的主要内容,如果未能解决你的问题,请参考以下文章

kotlin学习之嵌套类

JavaSE学习之枚举

Kotlin学习之object表达式和声明

从零开始学Kotlin-枚举

Kotlin学习之委托机制

Kotlin学习之反射