原文地址: Kotlin学习快速入门(9)—— 密封类的使用 - Stars-One的杂货小窝

代码逻辑中,很多时候我们会需要分支语句,来根据数据的情况走不同的处理逻辑,而密封类就是在这种情况下,方便我们的使用

介绍

密封类是用来表示受限的类继承结构

即当类中的一个值只能是有限的几种类型,而不能是其他的任何类型,从使用角度来说,相当于是枚举类的扩展

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的类型

参考

Kotlin学习快速入门(9)—— 密封类的使用的更多相关文章

  1. Kotlin学习快速入门(7)——扩展的妙用

    原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...

  2. Kotlin学习快速入门(4)——集合使用

    List,Set,Map都是集合 List 是一个有序集合,可通过索引(反映元素位置的整数)访问元素.元素可以在 list 中出现多次.列表的一个示例是一句话:有一组字.这些字的顺序很重要并且字可以重 ...

  3. Kotlin学习快速入门(1)——基本数据类型以及String常用方法使用

    本文适合有Java基础的人 Kotlin语法特点 相比java,省略括号,可以自动判断类型,省略new关键字,空指针捕获 主函数 kotlin文件(kt文件)中,只有要下列的方法,就可以运行,无需像之 ...

  4. Kotlin学习快速入门(2)——条件 数组 循环 方法

    条件 if条件判断 常用的判断和Java一样,这里提一下不同的用法 1.if可以作为三元运算符 val max = if (a > b) a else b 2.使用in判断是否在某个区间 val ...

  5. Kotlin学习快速入门(3)——类 继承 接口

    类 参考链接 类定义格式 使用class关键字定义,格式如下: class T{ //属性 //构造函数 //函数 //内部类 } Java Bean类 java bean类 //java bean类 ...

  6. Kotlin学习快速入门(5)——空安全

    介绍 kotlin中,对象可分为两种类型,可为空的对象和不可为空对象 默认为不可为空对象,代码检测如果发现不可为空对象赋予了null,则会标红报错. 可为空的对象,如果调用了方法,代码检测也会标红报错 ...

  7. pytest学习--快速入门

    一.pytest简介 Pytest是python的一种单元测试框架. pytest的特点: 入门简单,文档丰富 支持单元测试,功能测试 支持参数化,重复执行,部分执行,测试跳过 兼容其他测试框架(no ...

  8. pytorch入门--土堆深度学习快速入门教程

    工具函数 dir函数,让我们直到工具箱,以及工具箱中的分隔区有什么东西 help函数,让我们直到每个工具是如何使用的,工具的使用方法 示例:在pycharm的console环境,输入 import t ...

  9. Html5 学习系列(五)Canvas绘图API快速入门(1)

    引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏 ...

  10. Gradle学习系列之一——Gradle快速入门

    这是一个关于Gradle的学习系列,其中包含以下文章: Gradle快速入门 创建Task的多种方法 读懂Gradle语法 增量式构建 自定义Property 使用java Plugin 依赖管理 构 ...

随机推荐

  1. 2.列表--《Python编程:从入门到实践》

    2.1 列表   列表由一系列按特定顺序排列的元素组成.在Python中,用方括号([])来表示列表,并用逗号来分隔其中的元素. bicycles = ['trek', 'cannondale', ' ...

  2. ASP.NET Core分布式项目实战(集成ASP.NETCore Identity)--学习笔记

    任务24:集成ASP.NETCore Identity 之前在 Index 页面写了一个 strong 标签,需要加个判断再显示,不然为空没有错误的时候也会显示 @if (!ViewContext.M ...

  3. 永久解决 WSL vm.max_map_count 65530 is too low 的问题

    问题 在使用基于 WSL 的 Docker 的时候,启动 ES 总是会出现 vm.max_map_count 65530 is too low 问题,导致容器无法启动,网上答案基本就两种,例如 sta ...

  4. NC14698 模拟战役

    题目链接 题目 题目描述 齐齐和司机在玩单机游戏<红色警戒IV>,现在他们的游戏地图被划分成一个n*m的方格地图.齐齐的基地在最上方的4行格内,司机的基地在最下方的4行格内.他们只有一种攻 ...

  5. CSS实现导航栏

    1.知识点 列表 浮动 伪类 背景 文本格式化 盒子模型 2.效果 3.代码 <!DOCTYPE html> <html lang="en"> <he ...

  6. Spring boot 2.0启动自动执行sql语句

    项目地址:https://gitee.com/indexman/spring_boot_in_action 1.准备sql文件 将department.sql放到resources路径下 /* Nav ...

  7. Java并发编程实例--12.使用线程工厂创建线程

    工厂模式是面向对象编程世界中最有用的设计模式. 它是一个创新型的模式,目标是开发一个对象,这个对象的任务是去创建其他类对象. 这样一来,如果我们想创建某些类的对象就不需要使用new关键字.好处有以下几 ...

  8. 机器学习策略篇:详解单一数字评估指标(Single number evaluation metric)

    单一数字评估指标 无论是调整超参数,或者是尝试不同的学习算法,或者在搭建机器学习系统时尝试不同手段,会发现,如果有一个单实数评估指标,进展会快得多,它可以快速告诉,新尝试的手段比之前的手段好还是差.所 ...

  9. [Rust] 数据类型的转换

    数据类型的转换 类型转换的方式 Rust 提供了多种类型转换的方式. as T 用于数类型之间的转换.ixx, uxx, fxx 都可以. 注意:当溢出的时候,转换不会 panic,而是循环映射值. ...

  10. 如何将 IPhone 的文件导入 Linux

    如何将 IPhone 的文件导入 Linux 完全免费方案. 方法一: 使用 Koder 的 Local File Access 功能 这方法不需要在 Linux 端做任何配置. IPhone 端 安 ...