Kotlin 密封类和接口

2024-05-31 18:44
文章标签 接口 kotlin 密封

本文主要是介绍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

这篇关于Kotlin 密封类和接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别