参考链接

Kotlin官方文档

https://kotlinlang.org/docs/home.html

中文网站

https://www.kotlincn.net/docs/reference/properties.html

本系列为参考Kotlin中文文档

https://download.csdn.net/download/u011109881/21418027

整理的笔记

pdf也可以在这里下载

https://www.kotlincn.net/docs/kotlin-docs.pdf

因为密封类与枚举类关系比较紧密 临时调整学习顺序 先学习枚举类 再学习密封类

第二章 第十一节 枚举类

知识点

1 枚举类的基本用法

2 构造函数带参数的枚举

3 枚举类型可以定义成员变量与方法

4 枚举类实现抽象方法

5 在枚举类中实现接口

6 枚举的switch case

笔记

fun main() {// 1 枚举类的基本用法println(Direction.EAST)// 每种枚举类型都是一个枚举的类的类型println(Direction.EAST is Direction)// 2 构造函数带参数的枚举println(Color.BLUE)println(Color.BLUE.rgb)// 3 枚举类型可以定义成员变量与方法Color2.BLUE.test()Color2.BLUE.property = "property"println(Color2.BLUE.property)// 4 枚举类实现抽象方法println(ProtocolState.TALKING.signal())println(ProtocolState.WAITING)// 5 在枚举类中实现接口println(EnumImplInterface.PLUS)// 6 枚举的switch caseval driver1 = Driver(LicenseStatus.UNQUALIFIED);println(driver1.checkLicense())val driver2 = Driver(LicenseStatus.LEARNING);println(driver2.checkLicense())
}// 6 枚举的switch case
enum class LicenseStatus {UNQUALIFIED,LEARNING,QUALIFIED;
}class Driver(var status: LicenseStatus) {fun checkLicense(): String {return when (status) {LicenseStatus.LEARNING -> "在学"LicenseStatus.QUALIFIED -> "有资格"LicenseStatus.UNQUALIFIED -> "没有资格"}}
}// 5 在枚举类中实现接口
interface IAdd {fun add(a: Int, b: Int): Intfun sub(a: Int, b: Int): Int
}enum class EnumImplInterface() : IAdd {PLUS,SUB;override fun add(a: Int, b: Int): Int {return a + b}override fun sub(a: Int, b: Int): Int {return a - b}
}// 4 枚举类实现抽象方法
enum class ProtocolState {WAITING {override fun signal() = "WAITING"},TALKING {override fun signal() = "TALKING"};abstract fun signal(): String
}// 3 枚举类型可以定义成员变量与方法
enum class Color2() {RED,GREEN,BLUE;fun test() {println("test")}var property: String = ""
}// 2 构造函数带参数的枚举 带有一个属性 rgb
enum class Color(val rgb: Int) {RED(0xFF0000),GREEN(0x00FF00),BLUE(0x0000FF)
}// 1 枚举类的基本用法
enum class Direction {// Kotlin 种的枚举也是一个类NORTH, SOUTH, WEST, EAST
}class D0311EnumClass 

第二章 第八节密封类

知识点

1 密封类

2 继承自密封类

3 密封类中switch case的使用

4 密封类 实战2

5 总结 密封类vs枚举类

笔记

fun main() {// 1 密封类// 密封类用来表示受限的类继承结构:当一个值为有限几种的类型、而不能有任何其他类型时。// 在某种意义上,他们是枚举类的扩展:枚举类型的值集合也是受限的,但每个枚举常量只存在一个实例,而密封类的一个子类可以有可包含状态的多个实例。// 简而言之 枚举类里面的各种case是单例 但是密封类的各种case不一定是单例// 2 继承自密封类// val a = Expr() //密封类本身是抽象的 不能实例化val b = Const(12.0)val c = Sum(b, b)val d = NotANumberval e = NotANumberprintln(d === e)// 3 密封类中switch case的使用// 使用密封类的关键好处在于使用 when 表达式 的时候,如果能够验证语句覆盖了所有情况,就不需要为该语句再添加一个 else 子句了。// 当然,这只有当你用 when 作为表达式(使用结果)而不是作为语句时才有用。println(eval(Const(16.1)))println(eval(Sum(Const(16.1), Const(13.9))))println(eval(NotANumber))// 4 密封类 实战2 该案例参考自bilibili动脑学院P102密封类val status: LicenseStatus2 = LicenseStatus2.Learningval driver = Driver2(status)println(driver.checkLicense())val driver2 = Driver2(LicenseStatus2.Qualified("12345"))println(driver2.checkLicense())// 5 总结 密封类vs枚举类// 枚举类每个类型都是单例 密封类每个类型可以是单例也可以不是 相比于枚举类 密封类更加灵活
}// 4 密封类 实战2
sealed class LicenseStatus2 {object UnQualified : LicenseStatus2()// 密封类子类 单例 无状态object Learning : LicenseStatus2()// 密封类子类 单例 无状态// 可以有多个实例 licenseId是一个状态 不同driver的licenseId可以不一样class Qualified(val licenseId: String) : LicenseStatus2()
}class Driver2(var status: LicenseStatus2) {fun checkLicense(): String {return when (status) {is LicenseStatus2.Learning -> "在学"is LicenseStatus2.UnQualified -> "没有资格"is LicenseStatus2.Qualified -> "有驾驶证. 驾驶证编号:${(this.status as LicenseStatus2.Qualified).licenseId}"}}
}// 3 密封类种switch case的使用
fun eval(expr: Expr): Double = when (expr) {is Const -> expr.numberis Sum -> eval(expr.e1) + eval(expr.e2)NotANumber -> Double.NaN// else -> 0.0 // 'when' is exhaustive so 'else' is redundant here// 不再需要 `else` 子句,因为我们已经覆盖了所有的情况
}// 密封类不允许有非-private 构造函数(其构造函数默认为 private)
sealed class Expr1(parameter: String) {// Constructor must be private or protected in sealed class// public constructor(parameter: String, parameter2: String) : this(parameter)
}// 2 继承自密封类
// 密封类
// 虽然密封类也可以有子类,但是所有子类都必须在与密封类自身相同的文件中声明
// 注意,扩展密封类子类的类(间接继承者)可以放在任何位置,而无需在同一个文件中。
sealed class Expr// 数据类继承密封类
data class Const(val number: Double) : Expr()// 数据类继承密封类
data class Sum(val e1: Expr, val e2: Expr) : Expr()// 单例继承密封类
object NotANumber : Expr()class D0308SealedClass

Kotlin学习笔记 第二章 类与对象 第十一节 枚举类 第八节密封类相关推荐

  1. Kotlin学习笔记 第二章 类与对象 第五节 可见性 第六节 扩展

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

  2. Kotlin学习笔记 第二章 类与对象 第十四 十五节 委托 委托属性

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

  3. Kotlin学习笔记 第二章 类与对象 第七节 数据类

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

  4. Kotlin学习笔记 第二章 类与对象 第一节类与继承(补)

    参考链接 Kotlin官方文档 Kotlin docs | Kotlin 本系列为参考Kotlin中文文档 kotlin官方文档2020版.pdf-其它文档类资源-CSDN下载 第二章 第一节 类与继 ...

  5. Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名

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

  6. Kotlin学习笔记 第二章 类与对象 第三节接口 第四节 函数式接口

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

  7. Kotlin学习笔记 第二章 类与对象 第二节属性

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

  8. Kotlin学习笔记 第二章 类与对象 第九节 泛型

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

  9. Kotlin学习笔记 第二章 类与对象 第十节 内部类嵌套类

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

最新文章

  1. MongoDB 启动 Failed to connect to 127.0.0.1:27017, reason: 由于目标计算机积极拒绝,无法连接。...
  2. 记一次ssh登录异常
  3. python正则表达式中的转义字符_详解python中正则表达式的反斜线的转义功能
  4. leetcode 1787. 使所有区间的异或结果为零
  5. mulitp request
  6. MySql-Proxy之多路结果集归并
  7. Netty源码解读(一)概述
  8. 骑行GPS导航套件:多普达D600+夏新GPS-166+灵图天行者9配合,伴我骑行千里
  9. Oracle数据泵的使用
  10. Xshell设置密钥登录CentOS6.5_64位(图文版)
  11. SketchUp Pro 2018 Mac OS X/Windows 64/32位产品下载
  12. CTC Loss和Focal CTC Loss
  13. kafka auto.offset.reset latest earliest 详解
  14. Android 使用第三方SDK 一般流程
  15. 2022讯飞——糖尿病遗传风险检测挑战赛解决方案
  16. Peewee fn 用法
  17. 群晖3617可以有几个网卡_Nvme pcie千兆有线网卡
  18. 教育之星 计算机,冉冉升起的教育之星
  19. 数据库连接池 ( 二 ) 连接池概念
  20. 卷积神经网络( CNN)与全卷积神经网络(FCN)

热门文章

  1. echarts 柱状图圆柱_Echarts 柱状图配置详解
  2. win32常用文件操作
  3. datasnap——动态注册服务类
  4. [转]Aptana Studio 3配置Python开发环境图文教程
  5. HFUT 1357.梯田AGAIN(安徽省2016“京胜杯”程序设计大赛 D)
  6. NoSQL数据库--简介
  7. 深度学习——用softmax函数来规范可变参数
  8. 考前一个月,不,只剩29天
  9. java 泛型 class t_java 泛型中classT 和T的区别是什么?
  10. python flask和django_真正搞明白Python中Django和Flask框架的区别