Kotlin学习快速入门(9)—— 密封类的使用
2023-02-18 16:38:37 时间
代码逻辑中,很多时候我们会需要分支语句,来根据数据的情况走不同的处理逻辑,而密封类就是在这种情况下,方便我们的使用
介绍
密封类是用来表示受限的类继承结构
即当类中的一个值只能是有限的几种类型,而不能是其他的任何类型,从使用角度来说,相当于是枚举类的扩展
PS: Java17也有了这个密封类
使用
假设我们有中情形,需要根据一个type的数值来进行不同的逻辑,如下代码:
fun getMsg(type: Int) :String{
return when(type) {
1 -> TODO()
2 -> TODO()
else -> TODO()
}
}
编译器一定会提示我们需要写上有个else,如下图所示
这个时候是不是有点繁琐了,于是我们想到的一种优化方法,就是使用枚举类
enum class MyType{
TYPE_1,TYPE_2
}
fun getMsg(type: MyType) :String{
return when(type) {
MyType.TYPE_1 -> TODO()
MyType.TYPE_2 -> TODO()
}
}
而且可以通过编译器,将所有的枚举都加到分支上去(快捷键按下Alt+Enter
即可),如下图所示
但是,这个情况也有些限制,就是枚举类用来判断类型,但是不能灵活地携带些数据,如果使用密封类,就是解决此问题
密封类的关键字为sealed class
,如下代码所示:
sealed class MyType
class Type1(val data:String):MyType()
class Type2(val errorCode:Int):MyType()
fun getMsg(type: MyType) :String{
return when(type) {
is Type1 -> TODO()
is Type2 -> TODO()
}
}
这里Type1和Type2类都可以携带自己的数据
当然,上面只是个简单的写法,MyType这个类也可以继承或实现其他接口,比如说在RecyclerView中定义个ItemViewType,用来创建不同的itemView的类型
参考
相关文章
- [前端系列]vue3修改模板变量间隔符
- 在线客服系统代码安装 (附移动版APP下载)
- [PHP] 装饰器模式-结构型设计模式
- [PHP] 数据映射器模式-结构型设计模式
- [PHP] 组合模式-结构型设计模式
- [前端系列] 解决Invalid prop: custom validator check failed for prop "type"
- [PHP] 桥接模式-结构型设计模式
- [PHP] 使用curl扩展POST或者PUT时数据不全和连接中断的排查
- [TCP] TCP连接中的五个常见flag标志位
- [PHP] php使用curl扩展时的两个超时设置
- [PHP] 适配器模式-结构型设计模式
- [PHP] 静态工厂模式-创建型设计模式
- [PHP] 单例模式-创建型设计模式
- [PHP] 简单工厂模式-创建型设计模式
- [PHP] 原型模式-创建型设计模式
- [PHP] 对象池模式-创建型设计模式
- [Laravel系列] 验证规则required_without_all 的使用
- [PHP] 工厂方法设计模式-创建型设计模式
- [PHP] 生成器模式-创建型设计模式
- [Laravel系列] 在线客服系统代码优化-配置mysql数据库读写分离