枚举

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 - 枚举与密封类相关推荐

  1. kotlin枚举_Kotlin枚举班

    kotlin枚举 In this tutorial, we'll be looking into Kotlin Enum classes. What's in store for them? How ...

  2. kotlin学习之密封类(五)

    密封类的意义 比如,不用密封类 interface FatherClass class SonClass1: FatherClass{}class SonClass2: FatherClass{}fu ...

  3. Android快速开发整理(库、插件,kotlin枚举注解

    RxAndroid implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' Github:https://github.com/ReactiveX/ ...

  4. Kotlin 枚举类 enum

    枚举类就是一组命名的常数,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内. 枚举类的最基本的用法是实现类型安全的枚举: enum class Direction {NORTH, SOUT ...

  5. Kotlin学习笔记 第二章 类与对象 第十一节 枚举类 第八节密封类

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  6. Kotlin 密封类代替枚举类

    密封类代替枚举类 在Kotlin中由于密封类的特性,所以可以完全取代枚举类 应为object是final类,所以不能继承普通类,但是密封类是abstract,所以可以继承 示例中使用了中缀符号infi ...

  7. kotlin密封类_Kotlin密封级

    kotlin密封类 In this tutorial, we'll be looking into Kotlin Sealed Class. What are they? What's their u ...

  8. 理解Kotlin密封类Sealed

    " 密封类和接口表示受限制的类层次结构,提供对继承的更多控制.密封类的所有直接子类在编译时都是已知的.在定义密封类的模块和包之外不能出现其他子类.例如,第三方客户端不能在其代码中扩展您的密封 ...

  9. 【Kotlin】Kotlin enum 枚举类 ( 常用用法 | 初始化成员变量 | 实现抽象方法 | 实现接口 | 获取名称和位置索引 | 调用枚举常量方法 )

    文章目录 I . 枚举类常用用法 II . 枚举类初始化 III. 枚举类匿名类 IV . 枚举类实现接口 V . 获取枚举常量名称和位置索引 VI . 获取枚举常量的成员变量 VII . 调用枚举常 ...

最新文章

  1. linux tty core code,linux tty core 源码分析(5)
  2. 2020 我的C++的学习之路
  3. .NET连接ORACLE数据库的方法
  4. [云炬创业基础笔记]第七张创业团队测试3
  5. [IOI2018] werewolf 狼人
  6. android手势感应预研
  7. 计算机组成原理平均cpi怎么算_2020考研 | 计算机统考408院校盘点,408考试内容难易分析...
  8. java finalize逃脱_finalize(),析构函数(finalization)
  9. C语言野指针产生的情况
  10. 雷林鹏分享:AJAX 简介
  11. 企业搜索引擎(Enterprise Search Engine)的2007中重要的功能
  12. 记一次centos 7.3下的steam安装(该“STEAM”软件为美国valve开发的游戏平台)
  13. 分享110个ASP源码,有一款适合你
  14. Vmware 虚拟机安装教程
  15. Android之Http通信——1.初识Http协议
  16. 通常我们将python语言程序保存在一个后缀_c 语言程序设计 沈显君课后答案
  17. SQL注入之布尔型盲注
  18. 微信小程序——案例:京东首页
  19. kubeadm join时报错Unauthorized
  20. 多重积分MULTIPLE INTEGRALS

热门文章

  1. 无线通用型Wi-Fi模组,热像仪技术应用,ESP32芯片模组方案
  2. 【学习总结Day31】
  3. Android Quantity Strings (Plurals)- 复数形式的“一个”不起作用
  4. 显示HWC合成(hwc_display_contents_1_t,hwc_layer_1_t数据结构关系)
  5. PPCA(Probability PCA)
  6. 机器学习算法线上部署方法
  7. 说 2 件开心的事儿
  8. mysql 迁移数据库到另一台服务器
  9. centos安装tftpserver
  10. linux中uniq命令的使用