IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin - 枚举类 enum -> 正文阅读

[移动开发]Kotlin - 枚举类 enum

定义?

声明枚举类使用 enum 关键字。虽然是类但不能创建实例,只能通过类名调用类中定义的枚举常量,每一个枚举常量就是一个该枚举类的实例。

.oridinal

枚举常量在类中的索引,从0开始。不存在就报错:ArrayIndexOutOfBoundsException。

compareTo(? )

A.compareTo( B )

比较两个枚举常量的索引,A优先返回-1,相等返回0,A落后返回1。

.name

toString( )

枚举常量的名称。

values( )

valueof( )

获取所有枚举常量,返回一个数组。

通过枚举常量的名称获取对应枚举常量。不存在就报错:IllegalArgumentException。

enumValues<T>( )

enumValueOf<T>( )

同上,1.1版本起支持以泛型的方式访问。
getDeclaringClass( )通过枚举常量获取枚举类。
enum class Demo {
    //可以是小写,常量规范用大写
    RED, BLUE, YELLOW, GREEN
}

println(Demo.BLUE.ordinal)  //打印:1
println(Demo.BLUE.name)     //打印:BLUE
//如果 GREEN 不存在,报错:IllegalArgumentException
val aa = Demo.valueOf("GREEN")  //aa就是GREEN这个常量,类型是Demo,还不如就用类名调用
val bb = enumValueOf<Demo>("GREEN") //泛型访问方式
//拿到的是YELLOW,角标超过枚举常量数量报错:ArrayIndexOutOfBoundsException
val cc = Demo.values()[2]    //函数返回数组,因此可直接获取元素
Demo.values().forEach { print("$it,") }    //打印:RED,BLUE,YELLOW,GREEN,
enumValues<Demo>().forEach { print("$it,") }    //泛型访问方式

枚举常量初始化?

  • 每个枚举常量都是该枚举类的实例,可以定义枚举类的主构造进行初始化,枚举常量彼此之间用逗号分隔。声明枚举常量的时候就是在做初始化。
  • 可以声明属性或函数,但需要在最后一个枚举常量的后面使用分号 ; 隔开。
enum class Demo(var str: String, var age: Int) {
    RED("张三", 18),
    BLUE("李四", 22),
    YELLOW("王五", 15);   //后面定义属性或函数需要使用分号隔开
    var gender: Boolean = false
    fun show() = println(str + age)
}

println(Demo.BLUE.str)     //打印:李四
println(Demo.BLUE.age)     //打印:22
Demo.RED.show()     //打印:张三18
println(Demo.RED.gender)    //打印:false

枚举常量的匿名类

枚举常量类体中不管是声明属性还是函数,都需要先在枚举类中定义成open或者abstract,然后去复写。毕竟枚举常量是枚举类的实例。

enum class Demo {
    RED {
        override var str = "RED,str"
        override fun show() { println("RED,show") }
        override fun method() { println("RED,method") }
    };

    abstract fun show()
    open fun method() { println("Demo,method") }
    open var str: String = "Demo,str"
}

实现接口

可以在类中统一进行覆盖,枚举常量自行进行覆盖。

interface AA { fun showAA() }
interface BB { fun showBB() }

enum class Demo : AA, BB {
    RED {
        //覆盖掉统一覆盖,用自己的
        override fun showAA() { println("RED,showBB") }
        //未统一覆盖的,需要自己覆盖
        override fun showBB() { println("RED,showBB") }
    },
    BLUE {
        //未统一覆盖的,需要自己覆盖
        override fun showBB() { println("BLUE,showBB") }
    };
    //统一覆盖
    override fun showAA() { println("DEMO,showAA") }
}

Demo.RED.showAA()   //打印:RED,showBB
Demo.RED.showBB()   //打印:RED,showBB
Demo.BLUE.showAA()  //打印:DEMO,showAA
Demo.BLUE.showBB()  //打印:BLUE,showBB

一些用法举例

enum class Demo{
    BLACK,WHITE,GRAY;

    fun show(){
        when(this.name){
            "BLACK" -> println("BLACK")
            "WHITE" -> println("WHITE")
            "GRAY" -> println("GRAY")
        }
    }
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:18:35  更:2022-05-07 11:19:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 0:28:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码