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

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

枚举的定义

  • 一个类的对象是有限且固定的,这种实例有限且固定的类称为枚举类;
  • 枚举常量用逗号分隔,每个枚举常量都是一个对象;
    enum class EnumDemo9 {
        RED, BLUE, BLACK, WHITE
    }

枚举初始化

  • 每一个枚举都是枚举类的实例,它们可以被初始化;枚举类的主构造函数默认是私有的,初始化时需要在主构造函数中声明;
    enum class EnumDemo91(val rgb: Int) {
        RED(0xff0000),
        BLUE(0x0011ff),
        BLACK(0x000000),
        WHITE(0xffffff),
    }

枚举的使用

  • EnumClass.valueOf(value: String): 由枚举值的名称获取枚举实例;未匹配成功,会抛出IllegalArgumentException
  • EnumClass.values(): 以数组的形式,获取所有的枚举实例
    fun main(args: Array<String>) {
        var colors: Array<EnumDemo91> = EnumDemo91.values()
        var redColor = EnumDemo91.valueOf("RED")
    }
  • 每个枚举常数值都拥有属性,获取枚举相关信息:
    • val name: String //获取枚举名称
    • val ordinal: Int //获取枚举值在所有枚举数组中定义的顺序
    fun main(args: Array<String>) {
        val redColor = EnumDemo91.valueOf("RED")
        var redColorName = redColor.name
        var redColorOrdinal = redColor.ordinal
    }
  • 自 Kotlin 1.1 起,可以使用 enumValues<T>() 和 enumValueOf<T>() 函数以泛型的方式访问枚举类中的常量
    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
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,721评论 18 399
  • 面向对象编程(OOP) 在前面的章节中,我们学习了Kotlin的语言基础知识、类型系统、集合类以及泛型相关的知识。...
    Tenderness4阅读 9,972评论 1 6
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,579评论 9 118
  • 橙思:这是一场说易不易,说难不难的挑战,最大的阻碍始终在于自己。干扰太多,如无法专注,去繁就简,一天很容易以无所事...
    nico小花阅读 891评论 0 0
  • 每个人工作的时间就是工作,私下再好,是下班以后,上班就要严肃对待工作,不懈怠。下班以后称兄道弟都无所谓。所以,敬请...
    冰咋吃阅读 2,801评论 0 0

友情链接更多精彩内容