美文网首页
Kotlin学习笔记-枚举类(Enum)

Kotlin学习笔记-枚举类(Enum)

作者: smallestt | 来源:发表于2018-12-19 14:31 被阅读0次

    一、枚举类

    1.1 、枚举常量的初始化

    因为每一个枚举都是枚举类的实例,所以他们可以是初始化过的。

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

    1.2、枚举常量的匿名类

    • 要实现枚举常量的匿名类,则必须提供一个抽象方法(必须重写的方法)。且该方法定义在枚举类内部。而且必须在枚举变量的后面。
    • 枚举变量之间使用逗号(,)分割开。但是最后一个枚举变量必须使用分号结束。不然定义不了抽象方法。
    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()
    }
    

    1.3、枚举类的使用

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

    1.3.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)
    }  
    

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

    println(enumValues<Color>().joinToString { it.name })
    println(enumValueOf<Color>("RED"))
    //输出结果
    RED, WHITE, BLACK, GREEN
    RED
    

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

    相关文章

      网友评论

          本文标题:Kotlin学习笔记-枚举类(Enum)

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