当前位置: 首页 > news >正文

Kotlin 枚举类

使用 enum 修饰符;每个枚举常量都是一个对象,枚举常量以逗号分隔

// 枚举类
enum class Direction {NORTH, SOUTH, WEST, EAST
}// 每一个枚举都是枚举类的实例,所以可以这样初始化
enum class Color(val rgb: Int) {RED(0xFF0000),GREEN(0x00FF00),BLUE(0x0000FF)
}

枚举常量可以声明其带有相应方法以及覆盖了基类方法的自身匿名类 

enum class ProtocolState {WAITING {override fun signal() = TALKING},TALKING {override fun signal() = WAITING};// 如果枚举类定义任何成员,那么使用分号将成员定义与常量定义分隔开abstract fun signal(): ProtocolState
}

 一个枚举类可以实现接口(但不能从类继承)

enum class IntArithmetics : BinaryOperator<Int>, IntBinaryOperator {PLUS {override fun apply(t: Int, u: Int): Int = t + u},TIMES {override fun apply(t: Int, u: Int): Int = t * u};override fun applyAsInt(t: Int, u: Int) = apply(t, u)
}

枚举常量的列举或获取

// 假设枚举类的名称是 EnumClass
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>enum class RGB { RED, GREEN, BLUE }fun main() {for (color in RGB.values()) println(color.toString()) // prints RED, GREEN, BLUEprintln("The first color is: ${RGB.valueOf("RED")}") // prints "The first color is: RED"for (color in RGB.entries) println(color.toString())// prints RED, GREEN, BLUE
}

可以使用 enumValues<T>() 与 enumValueOf<T>() 函数以泛型的方式访问枚举类中的常量

enum class RGB { RED, GREEN, BLUE }inline fun <reified T : Enum<T>> printAllValues() {print(enumValues<T>().joinToString { it.name })
}printAllValues<RGB>() // 输出 RED, GREEN, BLUE

每个枚举常量也都具有这两个属性:name 与 ordinal, 用于在枚举类声明中获取其名称与(自 0 起的)位置

enum class RGB { RED, GREEN, BLUE }fun main() {println(RGB.RED.name) // prints REDprintln(RGB.RED.ordinal) // prints 0
}

http://www.lryc.cn/news/268325.html

相关文章:

  • 可运营的Leadshop开源商城小程序源码 +H5公众号+带视频教程
  • Qt底层机制之对象树总结
  • QT C++ TCP Socket 请求心知天气
  • 双向链表的实现及头尾插入删除
  • C语言—每日选择题—Day62
  • 基于 Sentry 的前端监控系统搭建(Linux)
  • 【C++入门到精通】Lock_guard与Unique_lock C++11 [ C++入门 ]
  • 电路设计(8)——计时器的multism仿真
  • Jmeter测试实践:文件下载接口
  • PyQt5实现学生管理系统第三天(下)
  • 第4章 | 安徽某高校《统计建模与R软件》期末复习
  • localforage本地存储(融合Web Storage,Web SQL Database,ndexedDB三种前端存储)
  • 【JavaWeb学习笔记】17 - ThreadLocal
  • 【ARMv8M Cortex-M33 系列 1 -- SAU 介绍】
  • sklearn 逻辑回归Demo
  • 什么是众创空间?他有什么特点?
  • 什么是数据分析思维
  • 利用Milvus Cloud和LangChain构建机器人:一种引人入胜且通俗易懂的方法
  • 数据结构-如何实现一个队列?逐步解析与代码示例(超详细)
  • 爬虫工作量由小到大的思维转变---<第二十三章 Scrapy开始很快,越来越慢(医病篇)>
  • .Net7.0 或更高版本 System.Drawing.Common 上传图片跨平台方案
  • 【MySQL】InnoDB和MyISAM区别
  • 3分钟了解安全数据交换系统有什么用!
  • 记录汇川:MODBUS TCP-梯形图
  • electron + sqlite3 解决打包后无法写入数据库
  • 【uniapp小程序-生成二维码+多个图片文字合并一张图】
  • Text-to-SQL小白入门(十)RLHF在Text2SQL领域的探索实践
  • 深度学习 | 基本循环神经网络
  • VSCode 加Cortex-Debug嵌入式调试方法
  • etcd-workbench一款免费好用的ETCD客户端,支持SSHTunnel、版本对比等功能