375,kotlin的Enum(enum的name和origin

2020-12-15  本文已影响0人  枫叶1234

注意: kotlin 的enum class 假如value为NSString,如果两个的枚举值的value相等,不是同一个枚举值,因为相同的枚举里边有name和origin,枚举里边不能取相同的名字

1.1.2、枚举常量

枚举类中的每一个枚举常量都是一个对象,并且他们之间用逗号分隔。

/**
 * 例:关于一个网络请求结果的枚举类
 */
enum class State{
    /*
         NORMAL : 正常
         NO_DATA : 数据为空
         NO_INTERNET : 网络未连接
         ERROR : 错误
         OTHER : 其他
     */

    NORMAL,NO_DATA,NO_INTERNET,ERROR,OTHER
}

1.1.3、访问枚举常量

使用方式为:
枚举类名.枚举常量.属性
通过上面例子来实例讲解:

// 使用中缀符号访问枚举常量
State.NORMAL.name
State.NO_DATA.name
State.NO_INTERNET.name
State.ERROR.name
State.OTHER.name

这里只是让大家明白怎样去访问一个枚举常量。没有讲解到枚举常量的使用。枚举常量的使用请大家耐心的看下去。在下面会详细介绍怎样去使用它。

1.2 、枚举常量的初始化

 enum class Color(var argb : Int){
     RED(0xFF0000),
     WHITE(0xFFFFFF),
     BLACK(0x000000),
     GREEN(0x00FF00)
}

1.3、枚举常量的匿名类

fun main(args: Array<String>) {
    ConsoleColor.BLACK.print()
}

enum class ConsoleColor(var argb : Int){
    RED(0xFF0000){
        override fun print() {
            println("我是枚举常量 RED ")
        }
    },
    WHITE(0xFFFFFF){
        override fun print() {
            println("我是枚举常量 WHITE ")
        }
    },
    BLACK(0x000000){
        override fun print() {
            println("我是枚举常量 BLACK ")
        }
   },
    GREEN(0x00FF00){
        override fun print() {
            println("我是枚举常量 GREEN ")
        }
    };

    abstract fun print()
}

输出结果为:

我是枚举常量 BLACK

1.4、枚举类的使用

1.4.1、访问枚举变量属性

fun main(args: Array<String>) {
    println("name = " + Color.RED.name + "\tordinal = " + Color.RED.ordinal)
    println("name = " + Color.WHITE.name + "\tordinal = " + Color.WHITE.ordinal)
    println("name = " + Color.BLACK.name + "\tordinal = " + Color.BLACK.ordinal)
    println("name = " + Color.GREEN.name + "\tordinal = " + Color.GREEN.ordinal)
}

enum class Color(var argb : Int){
     RED(0xFF0000),
     WHITE(0xFFFFFF),
     BLACK(0x000000),
     GREEN(0x00FF00)
}  

输出结果为:

name = RED  ordinal = 0
name = WHITE    ordinal = 1
name = BLACK    ordinal = 2
name = GREEN    ordinal = 3

1.4.2、使用enumValues<T>()enumValueOf<T>()访问

例: 枚举类还是上面例子中的Color类

println(enumValues<Color>().joinToString { it.name })
println(enumValueOf<Color>("RED"))

输出结果为:

RED, WHITE, BLACK, GREEN
RED

1.4.3、使用valueOf()values()检测

println(Color.valueOf("RED"))
println(Color.values()[0])
println(Color.values()[1])
println(Color.values()[2])
println(Color.values()[3])

输出结果为:

RED
RED
WHITE
BLACK
GREEN

其中,若使用Color.valueOf("不存在的枚举常量"),则会抛出IllegalArgumentException 异常,即枚举变量不存在。若使用Color.values()[大于枚举常量位置],则会抛出下标越界异常。

上一篇下一篇

猜你喜欢

热点阅读