sealed 简介
密封类用来表示受限的类继承结构:当一个值为有限几种的类型, 而不能有任何其他类型时。
在某种意义上,他们是枚举类的扩展:枚举类型的值集合 也是受限的,但每个枚举常量只存在一个实例,而密封类的一个子类可以有可包含状态的多个实例。
声明一个密封类,使用 sealed 修饰类,密封类可以有子类。
sealed 不能修饰 interface ,`abstract classe(会报 warning,但是不会出现编译错误)
密封类与枚举类对比
① 相同点 ( 类型限制 ) : 从类型种类角度对比 , 类与枚举类类似 , 枚举类的值的集合是受限制的 , 不能随意扩展 ;
② 不同点 ( 对象个数限制 ) : 从每个类型对象个数对比 , 枚举类的每个类型只能存在一个实例 , 而密封类的每个类型可以创建无数个实例 ;
创建状态集
密封类声明:在 class 前添加 sealed 修饰符 , 即可将该类声明为密封类 ;
和抽象类类似,Sealed Class可用于表示层级关系。它的子类可以是任意的类:data class、普通Kotlin对象、普通的类,甚至也可以是另一个密封类,所以,我们定义一个Result Sealed Class:
*/
sealed class Result {
//定义网络请求成功
data class OK(val result: String) : Result()
//定义网络请求失败
data class FAIL(val throwable: Throwable) : Result()
}
inline Kotlin 内联函数 inline - 简书
kotlin扩展函数 Kotlin基本语法之(八) 扩展函数 - 简书
kotlin data类/object Kotlin基本语法之(六) 数据类data与单例类object - 简书
kotlin 解构
kotlin operator
infix 中缀调用 Kotlin进阶语法之操作符重载与中缀调用 - 简书
Kotlin默认情况下不允许直接继承一个类,或复写一个父类方法,必须声明open
关键字表示可以继承或复写,也就是说默认情况下类、方法、成员变量默认具有final属性。
internal同模块可见,关键字有一个bug,当将一个kotlin模块打成java包,并导入在一个非Kotlin编译环境下时,internal失效,与public作用域一样。
kotlin Kotlin基本语法之(三)类与构造函数 Kotlin基本语法之(三)类与构造函数 - 简书
kotlin 成员变量 getter/setter Kotlin基本语法之(四)成员变量与get、set方法 - 简书
kotlin flow【Android】Kotlin 中的Flow是个什么东西_安卓flow_我又来搬代码了的博客-CSDN博客