Android开发Kotlin编程Android开发之Kotlin

从零开始学Kotlin-枚举(9)

2018-01-30  本文已影响75人  SiberianDante

从零开始学Kotlin基础篇系列文章

枚举的定义

    enum class EnumDemo9 {
        RED, BLUE, BLACK, WHITE
    }

枚举初始化

    enum class EnumDemo91(val rgb: Int) {
        RED(0xff0000),
        BLUE(0x0011ff),
        BLACK(0x000000),
        WHITE(0xffffff),
    }

枚举的使用

    fun main(args: Array<String>) {
        var colors: Array<EnumDemo91> = EnumDemo91.values()
        var redColor = EnumDemo91.valueOf("RED")
    }
    fun main(args: Array<String>) {
        val redColor = EnumDemo91.valueOf("RED")
        var redColorName = redColor.name
        var redColorOrdinal = redColor.ordinal
    }
    print(enumValues<EnumDemo91>().joinToString { it.name })//输出:RED,BLUE,BLACK,WHITE
    print(enumValueOf<EnumDemo91>("RED"))//输出:RED

枚举类与接口

    //定义一个接口
    interface ItemClickListener {
         fun onClick(msg: String)
    }
    //枚举类继承接口
    enum class EnumDemo92 : ItemClickListener {
        BUTTON {
            override fun onClick(msg: String) {
                print(msg)
            }
        },
        IMAGE {
            override fun onClick(msg: String) {
                print(msg)
            }
        }
    }

匿名类与抽象方法

  • 在枚举类中声明了抽象方法,所有的枚举常量都应声明其匿名类,并在匿名类中实现枚举类中声明的抽象方法,如果不实现,编译器会报错;
  • 如果枚举类定义任何成员,要使用分号将成员定义中的枚举常量定义分隔开;
  • 匿名内部类中声明的方法,并不能在外部使用,即使是其枚举类型的实例,也不可调用;但重写的枚举类中声明的方法,可以被其实例调用;
    enum class Person(var code: Int) {
        NAME1(0) {
            override fun showName(name: String): Person {
                return Person.values()[0]
            }
        },
        NAME2(1) {
            override fun showName(name: String): Person = NAME2
        };

        abstract fun showName(name: String): Person
    }
上一篇下一篇

猜你喜欢

热点阅读