Kotlin - 枚举与密封类
枚举
Kotlin 支持枚举,需要使用 enum class
进行声明,如:
enum class LogLevel {VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT
}
上面的代码可以理解为是 LogLevel 类的 companion object
语法糖:
class LogLevel private constructor() {companion object {val VERBOSE = LogLevel()val DEBUG = LogLevel()val INFO = LogLevel()val WARN = LogLevel()val ERROR = LogLevel()val ASSERT = LogLevel()}
}
所以我们可以知道枚举中的每一个成员,其实都是枚举的一个实例对象,因此枚举会比较占内存;另外,因为 class 默认是 final 的,且构造器是 private 的,所以枚举没有子类,因此枚举是实例可数的。既然枚举是类,那它就可以有构造函数以及成员方法:
enum class LogLevel(val id: Int) {VERBOSE(0), DEBUG(1), INFO(2), WARN(3), ERROR(4), ASSERT(5);override fun toString(): String {return "id = $id, name = $name, ordinal = $ordinal"}
}
枚举 enum class
自身提供了几个有用的成员属性与方法:
- 成员属性
ordinal
可以获取到当前枚举实例的序号 - 成员方法
values()
可以获取到枚举的所有实例对象 - 成员方法
valueOf()
可以根据枚举实例名获取到枚举实例对象
fun main() {println(LogLevel.DEBUG.ordinal) // 1LogLevel.values().map(::println) // id = 0, name = VERBOSE, ordinal = 0// id = 1, name = DEBUG, ordinal = 1// id = 2, name = INFO, ordinal = 2// id = 3, name = WARN, ordinal = 3// id = 4, name = ERROR, ordinal = 4// id = 5, name = ASSERT, ordinal = 5println(LogLevel.valueOf("ERROR")) // id = 4, name = ERROR, ordinal = 4
}
密封类
密封类是子类有限的类,需要使用 sealed class
进行声明:
// SealedClassExample.kt
sealed class Humanclass YellowRace : Human() // 黄种人
class WhiteRace : Human() // 白种人
class BlackRace : Human() // 黑种人
object Jesus : Human() // 耶稣
object MonkeyKing : Human() // 齐天大圣
它的构造器默认就是 private 的,且不可修改,它的子类只能定义在同个 kt 文件中或者是密封类的内部类:
综上,我们可以发现枚举(enum class
)和密封类(sealed class
)很相似,但要分清楚两者的区别:
- 枚举:实例可数,没有子类。
- 密封类:子类可数,有子类。
Kotlin - 枚举与密封类相关推荐
- kotlin枚举_Kotlin枚举班
kotlin枚举 In this tutorial, we'll be looking into Kotlin Enum classes. What's in store for them? How ...
- kotlin学习之密封类(五)
密封类的意义 比如,不用密封类 interface FatherClass class SonClass1: FatherClass{}class SonClass2: FatherClass{}fu ...
- Android快速开发整理(库、插件,kotlin枚举注解
RxAndroid implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' Github:https://github.com/ReactiveX/ ...
- Kotlin 枚举类 enum
枚举类就是一组命名的常数,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内. 枚举类的最基本的用法是实现类型安全的枚举: enum class Direction {NORTH, SOUT ...
- Kotlin学习笔记 第二章 类与对象 第十一节 枚举类 第八节密封类
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin 密封类代替枚举类
密封类代替枚举类 在Kotlin中由于密封类的特性,所以可以完全取代枚举类 应为object是final类,所以不能继承普通类,但是密封类是abstract,所以可以继承 示例中使用了中缀符号infi ...
- kotlin密封类_Kotlin密封级
kotlin密封类 In this tutorial, we'll be looking into Kotlin Sealed Class. What are they? What's their u ...
- 理解Kotlin密封类Sealed
" 密封类和接口表示受限制的类层次结构,提供对继承的更多控制.密封类的所有直接子类在编译时都是已知的.在定义密封类的模块和包之外不能出现其他子类.例如,第三方客户端不能在其代码中扩展您的密封 ...
- 【Kotlin】Kotlin enum 枚举类 ( 常用用法 | 初始化成员变量 | 实现抽象方法 | 实现接口 | 获取名称和位置索引 | 调用枚举常量方法 )
文章目录 I . 枚举类常用用法 II . 枚举类初始化 III. 枚举类匿名类 IV . 枚举类实现接口 V . 获取枚举常量名称和位置索引 VI . 获取枚举常量的成员变量 VII . 调用枚举常 ...
最新文章
- linux tty core code,linux tty core 源码分析(5)
- 2020 我的C++的学习之路
- .NET连接ORACLE数据库的方法
- [云炬创业基础笔记]第七张创业团队测试3
- [IOI2018] werewolf 狼人
- android手势感应预研
- 计算机组成原理平均cpi怎么算_2020考研 | 计算机统考408院校盘点,408考试内容难易分析...
- java finalize逃脱_finalize(),析构函数(finalization)
- C语言野指针产生的情况
- 雷林鹏分享:AJAX 简介
- 企业搜索引擎(Enterprise Search Engine)的2007中重要的功能
- 记一次centos 7.3下的steam安装(该“STEAM”软件为美国valve开发的游戏平台)
- 分享110个ASP源码,有一款适合你
- Vmware 虚拟机安装教程
- Android之Http通信——1.初识Http协议
- 通常我们将python语言程序保存在一个后缀_c 语言程序设计 沈显君课后答案
- SQL注入之布尔型盲注
- 微信小程序——案例:京东首页
- kubeadm join时报错Unauthorized
- 多重积分MULTIPLE INTEGRALS
热门文章
- 无线通用型Wi-Fi模组,热像仪技术应用,ESP32芯片模组方案
- 【学习总结Day31】
- Android Quantity Strings (Plurals)- 复数形式的“一个”不起作用
- 显示HWC合成(hwc_display_contents_1_t,hwc_layer_1_t数据结构关系)
- PPCA(Probability PCA)
- 机器学习算法线上部署方法
- 说 2 件开心的事儿
- mysql 迁移数据库到另一台服务器
- centos安装tftpserver
- linux中uniq命令的使用