当前位置: 首页 > news >正文

Kotlin学习之密封类

Kotlin中的密封类:

kotlin中的密封类,用关键词Sealed修饰,且还有一个规定:Sealed类的子类应该是Sealed类的嵌套类,或者应该在与Sealed类相同的文件中声明。
当我们想定义一个有相同父类,但是有不同子类的时候,我们可以用枚举,抽象类,密封类来表示。
下面一一讲解它们之间的区别。

1. 枚举

enum class Result(val data: String) {SUCCESS("Success"),ERROR("Error")
}

但是如果我们ERROR中想定义一个Exception,那么枚举类是不允许的。

enum class Result(val message: String) {SUCCESS("Success"),ERROR(val exception: Exception) // 错误的写法
}

说到底,枚举它不能很好的扩展子类的状态

2. 密封类

sealed class Result
data class Success(val msg: String) : Result()
data class Error(val errorCode: Int, val exception: Exception) : Result()
object Other : Result()

可以看到,密封类的好处是,它的子类可以是普通类,data class, object等,而且子类可以自由扩展属性状态
另外,密封类的另外一个好处是,当我们用when的时候,不用再加else 判断了

 when (val result: Result = Success("success")) {is Success -> {Log.d("TAG", result.msg)}is Error -> {Log.d("TAG", "$result.errorCode")}is Other -> {Log.d("TAG", "Other")}}

3. 抽象类

我们将Result改成抽象类

abstract class Result
data class Success(val msg: String) : Result()
data class Error(val errorCode: Int, val exception: Exception) : Result()
object Other : Result()

在when中使用的时候,编译器会提示我们要加else分支。但是在密封类中,就不会存在这个问题,因为编译器知道密封类所有的子类,但是抽象类不一样了,因为我们可以在任意地方来继承实现子类,子类可能是很多的,所以需要加上else分支。
在这里插入图片描述

相关文章:

Kotlin学习之密封类

Kotlin中的密封类: kotlin中的密封类,用关键词Sealed修饰,且还有一个规定:Sealed类的子类应该是Sealed类的嵌套类,或者应该在与Sealed类相同的文件中声明。 当我们想定义一个有相同父类,但是有不同子类的时候&#xf…...

opencv鼠标事件函数setMouseCallback()详解

文章目录 opencv鼠标事件函数setMouseCallback()详解1、鼠标事件函数:(1)鼠标事件函数原型:setMouseCallback(),此函数会在调用之后不断查询回调函数onMouse(),直到窗口销毁(2)回调函…...

硬件知识积累 USB 接口 type - A type - B type - C 的介绍与功能说明 (简单介绍)

1. USB 的介绍 1.1 USB 的定义 USB : 通用串行总线(英语: Universal Serial Bus,缩写:USB)是一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数字电视&a…...

【LeetCode】290. 单词规律

这里写自定义目录标题 2023-8-30 09:34:23 290. 单词规律 2023-8-30 09:34:23 这道题目,我是根据 205. 同构字符串 的思路一样,都转化为另外一个第三方的字符串,在比较翻译过后的语句是不是一样的。 class Solution {public boolean wordP…...

研磨设计模式day12迭代器模式

目录 场景 解决方案 解决思路 代码示例 代码改造 Java实现迭代器 迭代器模式的优点 思考 何时选用 场景 大公司收购了一个小公司,大公司的工资系统采用List来记录工资列表,而小公司是采用数组,老板希望通过决策辅助系统来统一查看…...

Python3不支持sqlite3的解决方法

先贴报错&#xff1a; >>> import sqlite3 Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/usr/local/lib/python3.10/sqlite3/__init__.py", line 57, in <module>from sqlite3.dbapi2 impor…...

Qt应用开发(基础篇)——消息对话框 QMessageBox

一、前言 QMessageBox类继承于QDialog&#xff0c;是一个模式对话框&#xff0c;常用于通知用户或向用户提出问题并接收答案。 对话框QDialog QMessageBox消息框主要由四部分组成&#xff0c;一个主要文本text&#xff0c;用于提醒用户注意某种情况;一个信息文本informativeTex…...

ETC reset

ETC重新激活 换前挡风玻璃膜会把ETC设备拿下来&#xff0c;需要到【ETC服务中心】重新【粘上去】&#xff0c;另外需要工作人员用手持终端【重新激活】 ETC 背面有个 【白色】开关小柱子&#xff0c;一旦拆下来就失效&#xff0c;因为这个开关弹出来了 截面图看就是这样的&…...

2023年8月30日-[SWPUCTF 2021 新生赛]jicao

<?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"wllm") {echo $flag;} ?> 包含了flag.php文件&#xff0c;设定了一个POST请求的id和…...

MariaDB数据库服务器

目录 一、什么是数据库&#xff1f; 二、什么是关系型数据库&#xff1f; 三、数据库字符集和排序规则是什么&#xff1f; 四、常用数据类型 五、Mariadb数据库相关配置案例 一、什么是数据库&#xff1f; 数据库&#xff08;DB&#xff09;是以一定方式长期存储在计算机硬盘内…...

Nat. Mach. Intell 2023 | DrugBAN+:域自适应的可解释双线性插值网络改进药物-靶标预测(DTI)

DrugBAN&#xff1a;Interpretable bilinear attention network with domain adaptation improves drug–target prediction 论文&#xff1a;Interpretable bilinear attention network with domain adaptation improves drug–target prediction | Nature Machine Intellige…...

org.springframework.web.reactive.function.server.ServerResponse设置响应头

记录一下 String host serverRequest.uri().getHost();Consumer<HttpHeaders> headersConsumer consumer -> {consumer.setAccessControlAllowOrigin(host);consumer.setAccessControlAllowCredentials(true);consumer.set("Access-Control-Allow-Headers"…...

高频面试题:如何分别用三种姿势实现三个线程交替打印0到100

最近面试遇到的一道题&#xff0c;需要三个线程交替打印0-100&#xff0c;当时对多线程并不是很熟悉因此没怎么写出来&#xff0c;网上搜了之后得到现 synchronized wait/notifyAll 实现思路&#xff1a;判断当前打印数字和线程数的取余&#xff0c;不等于当前线程则处于等待…...

【git】Idea撤回本地分支、或远程分支提交记录的各种实际场景操作步骤

文章目录 idea撤回本地分支、远程分支场景操作集合场景1&#xff1a;要撤回最后一次本地分支的提交实现效果&#xff1a;操作步骤&#xff1a; 场景2&#xff1a;要撤回最后一次远程分支的提交有撤销记录的&#xff1a;实现效果&#xff1a;操作步骤&#xff1a; 无撤销记录的&…...

FPGA SPI 驱动程序

1.引言 此驱动程序已经完成很久了&#xff0c;花了2个星期的时间&#xff0c;主要是提升程序运行的效率。最近整理文件的时候又看到了&#xff0c;记录一下。 2.程序框架分解 module adc7254_Ctrl(input sys_clk, //system clkc 50Minput re…...

【实战】十一、看板页面及任务组页面开发(五) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十七)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

mac m1 docker 安装kafka和zookeeper

获取本地ip地址 ifconfig en0 192.168.0.105. 下面的ip都会使用到 1、拉取镜像 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka 2、启动容器 启动 zookeeper docker run -d --name zookeeper -p 2181:2181 映射 3、 启动 kafka 注意&#xff…...

宏观经济和风电预测误差分析(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

GO学习之 搜索引擎(ElasticSearch)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…...

Sentinel —实时监控

Sentinel 提供对所有资源的实时监控。如果需要实时监控&#xff0c;客户端需引入以下依赖&#xff08;以 Maven 为例&#xff09;&#xff1a; <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artif…...

保姆级教程:用C# WinForm给STM32写个Modbus固件升级工具(附完整源码)

从零构建STM32固件升级工具&#xff1a;C# WinForm与Modbus协议深度实践 1. 开发环境与项目初始化 在Visual Studio 2022中新建Windows窗体应用项目时&#xff0c;建议选择.NET Framework 4.7.2或更高版本以获得最佳兼容性。项目创建后&#xff0c;首先需要配置NuGet包管理器安…...

Omni-Vision Sanctuary助力后端开发:设计高并发API接口的最佳实践

Omni-Vision Sanctuary助力后端开发&#xff1a;设计高并发API接口的最佳实践 1. 高并发API接口设计的挑战与机遇 想象一下这样的场景&#xff1a;你的电商平台刚刚上线了一个基于Omni-Vision Sanctuary的智能商品描述生成功能&#xff0c;突然涌入的用户请求让你的服务器不堪…...

PyTorch 2.8视频生成环境搭建:FFmpeg 6.0+Diffusers开箱即用教程

PyTorch 2.8视频生成环境搭建&#xff1a;FFmpeg 6.0Diffusers开箱即用教程 1. 环境准备与快速验证 在开始视频生成项目前&#xff0c;我们需要确保基础环境已经正确配置。本教程使用的镜像已经预装了所有必要的组件&#xff0c;包括&#xff1a; 核心框架&#xff1a;PyTor…...

别急着重烧系统!卡在Starting Kernel时,先检查uboot的mmc分区表(以imx6ull为例)

嵌入式系统启动卡在Starting Kernel&#xff1f;先别急着重烧系统&#xff01; 当你满怀期待地按下开发板电源键&#xff0c;串口终端却无情地定格在"Starting kernel..."这一行时&#xff0c;那种挫败感每个嵌入式开发者都深有体会。大多数人的第一反应是怀疑内核镜…...

保姆级教程:用Docker快速部署FreeSWITCH的ASR服务(含FunASR、sherpa-ncnn)

基于Docker的FreeSWITCH语音识别服务实战指南 语音识别&#xff08;ASR&#xff09;技术正在重塑通信系统的交互方式。对于FreeSWITCH开发者而言&#xff0c;将高效ASR服务集成到电话系统中&#xff0c;可以解锁语音指令控制、实时字幕生成、智能客服等创新应用场景。Docker技术…...

5大突破让暗黑2单机体验翻倍:PlugY插件全方位应用指南

5大突破让暗黑2单机体验翻倍&#xff1a;PlugY插件全方位应用指南 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 当你第10次因储物箱满被迫丢弃装备时&#xff0c;当…...

WebPlotDigitizer:高效精准图表数据提取的智能化解决方案

WebPlotDigitizer&#xff1a;高效精准图表数据提取的智能化解决方案 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 副标题&#xff1…...

告别迷茫!Quartus II 13.1 从新建工程到烧录FPGA的保姆级避坑指南

Quartus II 13.1实战指南&#xff1a;从零开始玩转FPGA开发 第一次打开Quartus II 13.1时&#xff0c;那个灰蒙蒙的界面和密密麻麻的菜单栏确实容易让人望而生畏。作为Altera&#xff08;现已被Intel收购&#xff09;旗下经典的FPGA开发工具&#xff0c;它在高校实验室和企业研…...

别只埋头改Bug!从Flutter高德地图鸿蒙适配,聊聊跨平台插件架构设计的最佳实践

从Flutter高德地图鸿蒙适配看跨平台插件架构设计的黄金法则 当Flutter遇上鸿蒙&#xff0c;开发者们既兴奋又忐忑。兴奋的是跨平台开发框架与国产操作系统的强强联合&#xff0c;忐忑的是两者结合带来的技术适配挑战。去年我们团队在将高德地图SDK集成到Flutter鸿蒙应用时&…...

深求·墨鉴(DeepSeek-OCR-2)惊艳效果:书法题跋+钤印位置+行气关系可视化还原

深求墨鉴&#xff08;DeepSeek-OCR-2&#xff09;惊艳效果&#xff1a;书法题跋钤印位置行气关系可视化还原 1. 引言&#xff1a;当OCR遇见水墨美学 你有没有遇到过这样的场景&#xff1f;面对一幅珍贵的书法作品或古籍文献&#xff0c;想要将其中的文字内容数字化&#xff0…...