美文网首页
375,kotlin的Enum(enum的name和origin

375,kotlin的Enum(enum的name和origin

作者: 枫叶1234 | 来源:发表于2020-12-15 10:12 被阅读0次

    注意: 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、枚举类的使用

    • 每个枚举常量都包含两个属性:name(枚举常量名)和ordinal(枚举常量位置)
    • 提供了values()valueOf()方法来检测指定的名称与枚举类中定义的任何枚举常量是否匹配。
    • 自 Kotlin 1.1 起,可以使用 enumValues<T>()enumValueOf<T>() 函数以泛型的方式访问枚举类中的常量。

    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()[大于枚举常量位置],则会抛出下标越界异常。

    相关文章

      网友评论

          本文标题:375,kotlin的Enum(enum的name和origin

          本文链接:https://www.haomeiwen.com/subject/gsvjgktx.html