当前位置:网站首页>Kotlin:Sealed class密封类详解
Kotlin:Sealed class密封类详解
2022-07-28 17:06:00 【明飞1987】
一:密封类的定义
在类名之前使用sealed关键字将类声明为密封类。 密封类仅在编译时限制类型集来确保类型安全的重要性。 密封类隐式是一个无法实例化的抽象类。
二:密封类所具有的特性和与别的类具有不同之处
①Sealed class(密封类) 是一个有特定数量子类的类,看上去和枚举有点类似,所不同的是,在枚举中,我们每个类型只有一个对象(实例);而在密封类中,同一个类可以拥有几个对象。
②Sealed class(密封类)的所有子类都必须与密封类在同一文件中
③Sealed class(密封类)的子类的子类可以定义在任何地方,并不需要和密封类定义在同一个文件中
④Sealed class(密封类)没有构造函数,不可以直接实例化,只能实例化内部的子类
二:如何获取密封类里面的函数方法
只能创建密封类子类对象 通过密封类的子类对象调用密封类里的函数方法
sealed class SealedClass{
class SealedClass1():SealedClass()
class SealedClass2():SealedClass()
fun hello(){
println("Hello World ... ")
}
}
只能通过密封类内部的子类实例化对象,这时就可以执行里面的方法了
fun main(args:Array<String>){
var sc:SealedClass = SealedClass.SealedClass1()
sc.hello()
}
三:
密封类通常与表达when时一起使用。 由于密封类的子类将自身类型作为一种情况。 因此,密封类中的when表达式涵盖所有情况,从而避免使用else子句。
sealed class MyColor {
class Yellow : MyColor()
class Red : MyColor()
class Black : MyColor()
}
fun evals(color: MyColor) =
when (color) {
is MyColor.Yellow -> println("yellow")
is MyColor.Red -> println("red")
is MyColor.Black -> println("black")
}//todo 不需要使用else了
fun main(args: Array<String>) {
evals(MyColor.Black())
}
边栏推荐
- 十进制转二进制进阶版(可转化负数以及边界值)
- Tencent Tang Daosheng: open source is a new mode of production and collaboration in the era of industrial Internet
- It is said that software testing is the worst in the IT industry. Is that so?
- Meta Q2财报:营收首次下滑,Metaverse将与苹果竞争
- Introduction and advanced level of MySQL (5)
- MYSQL入门与进阶(八)
- jvm调优
- redis优势以及数据结构相关知识
- Log base zap of go language series
- APP为什么用JSON协议与服务端交互:序列化相关知识
猜你喜欢

1.3 linked list

112. 使用自开发的代理服务器解决 SAP UI5 FileUploader 上传文件时遇到的跨域访问错误

Shenzhen offline registration starrocks on AWS: how to conduct rapid unified analysis of real-time data warehouses

Introduction and advanced level of MySQL (10)

Gateway入门

jvm四种引用类型

面试官:ThreadLocal使用场景有哪些?内存泄露问题如何避免?

LeetCode_ 63_ Different paths II

LeetCode_63_不同路径Ⅱ

MYSQL入门与进阶(六)
随机推荐
Ue5 gas learning notes 1.10 prediction
1.3、链表
高德地图实现自定义小蓝点 自定义点标记 绘制多边形/圆形区域 根据地图的移动显示或者隐藏自定义点标记的相关实现
Live broadcast starrocks technology insider: low base global dictionary optimization
There is a special cryptology language called asn.1
Pyqt5 rapid development and practice 5.3 multithreading
1.2 queue
Error 2003 (HY000) can't connect to MySQL server on 'localhost3306' (10061) solution
Bubble sorting and Related videos
MYSQL入门与进阶(五)
1.3 linked list
MySQL advanced mvcc (ultra detailed collation)
Introduction and advanced level of MySQL (10)
MYSQL入门与进阶(十)
Go语言系列之日志库zap
[GXYCTF2019]StrongestMind
Docker搭建Mysql主从复制
UE5 GAS 学习笔记 1.1能力系统组件Ability System Component
2022-07-27 第四小组 修身课 学习笔记(every day)
不理解模块化、组件化、插件化的区别怎么行?