Kotlin 密封类和接口

文章目录

  • 定义
  • 实例化对象
  • when 分支判定

定义

密封类和接口使用sealed修饰。

密封类和接口与其直接子类只能位于同一包内(一般是同一文件夹中,也可以是不同文件夹,package声明为同样的包名):

sealed class Route(val id: String)// 直接子类
class MyRoute(id: String): Route(id)
// 间接子类
class OtherRoute(id: String): MyRoute(id)sealed interface WaterState

实例化对象

可以使用data object声明密封类或接口的对象(v1.9某个版本之前是用object):

sealed class Route(val id: String) {data object Home: Route("Home")
}sealed interface WaterState {abstract val name: Stringdata object Liquid: WaterState {override val name = "液态"}data object Gaseous: WaterState {override val name = "气态"}data object Solid: WaterState {override val name = "固态"}
}

不能直接实例化密封类或接口的对象(因为其构造函数的可见性修饰符是protected,并且 Kotlin 限制sealed不能初始化,得用data object继承的方式创建对象)。

fun main() {// 这是不被允许的// val myRoute = object : Route() {}// val myRoute = Route()
}

如果你一定要这样做,可以考虑使用类继承将修饰符改为public

sealed class Route(val id: String) {data object Home: Route("Home")
}class MyRoute(id: String): Route(id)fun main() {print(MyRoute("MyRoute") is Route)
}
true

when 分支判定

when必须将全部情况罗列,并且是对于密封类对象时,如果将全部分支给出,则无需给出else分支(跨平台项目例外):

sealed class Route(val id: String) {data object Home: Route("Home")
}class MyRoute(id: String): Route(id)// 此时分支必须全部给出,给不全要使用 else 收尾
fun checkRoute(route: Route): String = when(route) {Route.Home -> "Home"is MyRoute -> "MyRoute"
}fun main() {print(checkRoute(MyRoute("Route")))
}
MyRoute

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/20346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杂项——32舵机控制

180度舵机内部有一个基准电路,产生周期为20ms,高电平宽度为1.5ms的基准信号,这个位置其实是舵机转角的中间位置。通过比较信号线的PWM信号与基准信号,内部的电机控制板得出一个电压差值,将这个差值加到电机上控制舵机转…

头歌页面置换算法第4关:计算CLOCK算法缺页率

2 任务:CLOCK算法 2.1 任务描述 设计CLOCK页面置换算法模拟程序:从键盘输入访问串。计算CLOCK算法在不同内存页框数时的缺页数和缺页率。要求程序模拟驻留集变化过程,即能模拟页框装入与释放过程。 2.2任务要求 输入串长度作为总页框数目,补充程序完成CLOCK算法。 2.3算法思…

[机缘参悟-196] - 《道家-水木然人间清醒1》读书笔记 -20-主要内容与核心理念

目录 前言: 一、主要内容 1.1 第一章 真相本质 1. 底层逻辑 2. 人生曲线 3. 价值规律 4. 底层规律 1.2 第二章 认知觉醒 1. 认知要素 2. 幸存者偏差 3. 借假修真 4. 两套秩序 1.3 第三章 关系界限 1. 内 观 2. 独 立 3. 真 爱 1.4 第四章 商业逻辑…

【CPP】双端队列简介(deque)

简介:双端队列(deque) 目录 1.概述2.特点3.底层原理 1.概述 双端队列:是一种顺序表和顺序表的结合数据结构,不是队列。 它提供顺序表的[]下标访问和链表的中间头部的较高效率插入删除操作。 2.特点 顺序表的优缺点: 优点&…

linux之docker- image.tar 的导出和导入

一、情况 docker 镜像有时无法从外网访问,需要把docker 打包导出到本地,然后以文件的形式,发送给其他人,再然后其他人把docker 镜像文件导入到自己的服务器本地镜像仓库,方可使用。也可把镜像上传到公司内网。下面就开…

ython 2.7 环境配置:深度探索与高效实践

Python 2.7 环境配置:深度探索与高效实践 在数字化时代的浪潮中,Python作为一种强大而灵活的编程语言,深受开发者们的喜爱。尽管Python 3版本已逐渐成为主流,但Python 2.7依然在某些特定领域和场景中发挥着不可替代的作用。本文将…

Verilog HDL基础知识(二)

引言:本文继续介绍Verilog HDL基础知识,重点介绍赋值语句、阻塞与非阻塞、循环语句、同步与异步、函数与任务语法知识。 1. 赋值语句 在Verilog中,有两种进行赋值的方法,即连续赋值语句和过程赋值语句(块&#xff09…

Java数据结构-二叉搜索树

目录 1. 概念2. 二叉搜索树的操作2.1 查找2.2 插入2.3 删除 3. 全部代码 1. 概念 二叉搜索树是特殊的二叉树,也叫二叉排序树,它的特点是:每个结点的左子树上的所有结点的值都小于这个结点的值,右子树上的所有结点的值都大于这个结点的值,另外所有的左子树和右子树也分别为二叉…

详解 Spark 编程之 RDD 依赖关系

一、依赖与血缘关系 依赖:两个相邻 RDD 之间的关系血缘关系:多个连续的 RDD 的依赖由于 RDD 不会保存数据,为了提高容错性,每个 RDD 都会保存自己的血缘关系,一旦某个转换过程出现错误,可以根据血缘关系重新…

JavaScript实现粒子数字倒计时效果附完整注释

<!DOCTYPE html> <html lang="en"><head><meta charset

随身wifi网络卡顿怎么解决?随身WiFi哪个牌子的最好用?排名第一名的随身WiFi!

对于随身wifi靠不靠谱这个问题&#xff0c;网上一直存在争议。很多人的随身wifi网速不稳定&#xff0c;信号看着满格就是上不了网。关于随身wifi卡顿到底该怎么解决呢&#xff1f; 1.如果是设备网络在一个地方上网速度很快&#xff0c;换一个地方网络就不行了&#xff0c;很可能…

股票买卖II

股票买卖II 时间限制&#xff1a;1秒 内存限制&#xff1a;128M 题目描述 给定一个长度为N的数组&#xff0c;数组中的第i个数字表示一个给定股票在第i天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票…

解析Java中1000个常用类:Readable类,你学会了吗?

在 Java 编程中,处理输入流是一个常见的需求。Java 提供了多种方式来处理输入流,例如 InputStream、Reader 等类和接口。 而 Readable 接口是 Java 提供的一个简单而强大的接口,用于表示可读的字符序列。 本文将详细介绍 Readable 接口的用途、实现原理、应用场景,并通过…

Linux学习笔记(清晰且清爽)

本文首次发布于个人博客 想要获得最佳的阅读体验&#xff08;无广告且清爽&#xff09;&#xff0c;请访问本篇笔记 Linux安装 关于安装这里就不过多介绍了&#xff0c;安装版本是CentOS 7&#xff0c;详情安装步骤见下述博客在VMware中安装CentOS7&#xff08;超详细的图文教…

QT之全局忽略编译警告QMAKE_CXXFLAGS

全局忽略编译警告QMAKE_CXXFLAGS 这个是Qt中用来给编译器传递开关的&#xff0c;常写在’pro’文件或’pri’文件中。 将所有的警告当成错误处理 QMAKE_CXXFLAGS -Werror return-type //函数有返回值 QMAKE_CXXFLAGS -Werror return-local-addr //返回局部变量地址 QMAKE…

Dubbo架构概览:服务注册与发现、远程调用、监控与管理

Dubbo 是一个成熟的、高性能的、基于 Java 的微服务开发框架&#xff0c;它主要用于解决分布式系统中的服务治理问题&#xff0c;包括服务的注册与发现、远程过程调用&#xff08;RPC&#xff09;、服务监控与管理等多个关键环节。以下是Dubbo架构概览的详细介绍&#xff1a; …

3种使用OpenCV进行图像合成的技巧

准备好探索图像世界的魔法了吗&#xff1f;今天&#xff0c;我们将用Python和OpenCV库&#xff0c;一起解锁三种超炫的图像合成技巧&#xff0c;让你的照片变得与众不同&#xff01;&#x1f308; 1. 图像融合&#xff1a;让风景与梦境交织 想象一下&#xff0c;把日出的辉煌…

【前端每日基础】day33——响应式布局

响应式布局是一种网页设计的方法&#xff0c;它可以使网站在不同的设备上&#xff08;如桌面电脑、平板电脑、手机等&#xff09;以及不同的屏幕尺寸上呈现出最佳的显示效果。响应式布局的目标是使用户在任何设备上都能够方便地访问和浏览网站&#xff0c;而不需要使用不同版本…

ios v品会 api-sign算法

vip品会 api-sign算法还原 ios入门案例 视频系列 IOS逆向合集-前言哔哩哔哩bilibili 一、ios难度与安卓对比 这里直接复制 杨如画大佬的文章的内容&#xff1a; ios难度与安卓对比 很多人说ios逆向比安卓简单&#xff0c;有以下几个原因 1 首先就是闭源&#xff0c;安卓开源…

PH编程入门:从基础到实践的全方位解析

PH编程入门&#xff1a;从基础到实践的全方位解析 PH编程&#xff0c;作为一种独特而强大的编程语言&#xff0c;正逐渐在各个领域展现其巨大的潜力。对于初学者来说&#xff0c;如何快速入门并掌握PH编程的精髓&#xff0c;是一个既充满挑战又充满机遇的过程。本文将从四个方…