Kotlin学习之枚举类

Posted 唐僧洗澡不秃头

tags:

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

Kotlin 枚举类

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

enum关键字在类头中的class关键字前面

enum class Color
    ...

枚举常量

枚举常量使用逗号分隔,每个枚举常量都是一个对象。

enum class Color 
    RED,
    GREEN,
    BLUE

访问枚举常量

枚举相关属性:

val name: String //获取枚举名称
val ordinal: Int //获取枚举值在所有枚举数组中定义的顺序

使用方式为:

枚举类名.枚举常量.属性

通过上面例子来实例讲解:

// 使用中缀符号访问枚举常量
Color.RED.name
Color.GREEN.name
Color.BLUE.name

枚举初始化

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

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

枚举常量的匿名类

要实现枚举常量的匿名类,则必须提供一个抽象方法(必须重写的方法)。且该方法定义在枚举类内部。而且必须在枚举变量的后面。

枚举变量之间使用逗号(,)分割开。但是最后一个枚举变量必须使用分号结束。不然定义不了抽象方法。

枚举还支持以声明自己的匿名类及相应的方法、以及覆盖基类的方法。如:

fun main(args: Array<String>) 
    ProtocolState.WAITING.signal()


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

    TALKING 
        override fun signal() = WAITING
    ;

    abstract fun signal(): ProtocolState

如果枚举类定义任何成员,要使用分号将成员定义中的枚举常量定义分隔开


使用枚举常量

Kotlin 中的枚举类具有合成方法,允许遍历定义的枚举常量,并通过其名称获取枚举常数。

EnumClass.valueOf(value: String): EnumClass  // 转换指定 name 为枚举值,若未匹配成功,会抛出IllegalArgumentException
EnumClass.values(): Array<EnumClass>        // 以数组的形式,返回枚举值

获取枚举相关信息:

val name: String //获取枚举名称
val ordinal: Int //获取枚举值在所有枚举数组中定义的顺序

实例

enum class Color
    RED,BLACK,BLUE,GREEN,WHITE


fun main(args: Array<String>) 
    var color:Color=Color.BLUE

    println(Color.values())
    println(Color.valueOf("RED"))
    println(color.name)
    println(color.ordinal)


自 Kotlin 1.1 起,可以使用 enumValues<T>()enumValueOf<T>() 函数以泛型的方式访问枚举类中的常量 :

enum class RGB  RED, GREEN, BLUE 

inline fun <reified T : Enum<T>> printAllValues() 
    print(enumValues<T>().joinToString  it.name )


inline fun <reified T : Enum<T>> printValue() 
    print(enumValueOf<T>("RED"))





fun main(args: Array<String>) 
    printAllValues<RGB>() // 输出 RED, GREEN, BLUE
    printValue<RGB>() // 输出 RED

https://www.cnblogs.com/Jetictors/p/7751662.html

菜鸟教程:https://www.runoob.com/kotlin/kotlin-enum-classes.html

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

Kotlin学习之函数

kotlin学习之嵌套类

JavaSE学习之枚举

Kotlin学习之object表达式和声明

从零开始学Kotlin-枚举

Kotlin学习之委托机制