sealed class-kotlin中的封闭类

embedded/2024/10/24 3:03:54/

在 Kotlin 中,sealed class密封类)是一种特殊的类,用于限制继承的类的数量。密封类可以被用来表示一组有限的类型,通常用于状态管理或表达多种可能的错误类型。

密封类用 sealed 关键字定义,这意味着只能在同一个文件中声明其子类。它有助于确保类型的安全性,因为编译器能够知道所有可能的子类类型。

sealed class Error : Exception() {data class NetworkError(val message: String) : Error() // 网络错误data class TimeoutError(val duration: Long) : Error() // 超时错误object UnknownError : Error() // 未知错误
}fun handleError(error: Error) {when (error) {is Error.NetworkError -> println("Network error: ${error.message}")is Error.TimeoutError -> println("Timeout after ${error.duration} ms")Error.UnknownError -> println("An unknown error occurred")}
}fun main() {val error1: Error = Error.NetworkError("Unable to connect to server")val error2: Error = Error.TimeoutError(5000)val error3: Error = Error.UnknownErrorhandleError(error1) // 输出: Network error: Unable to connect to serverhandleError(error2) // 输出: Timeout after 5000 mshandleError(error3) // 输出: An unknown error occurred
}
  • 子类: NetworkErrorTimeoutErrorError 的子类,表示具体的错误类型。UnknownError 是一个对象表示特定的错误状态。
  • 类型安全: 使用 when 表达式处理错误时,编译器会确保覆盖所有可能的子类,减少了遗漏处理某些错误的风险。
  • 扩展性: 如果需要增加新的错误类型,只需在同一文件中添加新的子类,保持代码结构的清晰性。

http://www.ppmy.cn/embedded/129969.html

相关文章

Windows系统PyCharm右键运行.sh文件

在参考了Windows系统下pycharm运行.sh文件,执行shell命令_shell在pycharm-CSDN博客 和深度学习:PyCharm中运行Bash脚本_pycharm bash-CSDN博客 配置了右键执行.sh文件之后,发现在Windows的PyCharm中直接右键运行sh文件,存在如下…

Numba: 使用GPUs加速python

作为python函数的即时编译器,Numba是直接在标准python解释器中运行的,所以我们可以直接在GPU上运行用python写的CUDA kernels(在显卡上运行的函数),换句话说,Numba可以让我们直接使用python而非学习一门新语…

2-124 基于matlab得结构稀疏字典实现SAR图像低秩重建

基于matlab得结构稀疏字典实现SAR图像低秩重建,通过K-SVD和W-KSVD结合OMP进行重建。K-SVD算法是一种字典学习算法,能够对字典进行优化,使其能够更好地表示训练样本集。W-KSVD算法是K-SVD算法的扩展,它能够利用权重信息对字典进行优…

网络安全的挑战与对策:从技术防御到综合治理的全方位分析

引言 随着互联网的迅猛发展,网络安全已成为全球关注的焦点之一。网络技术的进步为社会带来了巨大的经济、文化和科技红利,但也使得信息系统面临越来越复杂的安全威胁。网络攻击的种类日益多样化、攻击技术日益成熟化,给个人、企业、政府以及关键基础设施带来了严重的安全挑…

在 WPF 中使用 OpenTK:从入门到进阶

一、引言 WPF(Windows Presentation Foundation)是微软推出的用于创建丰富的桌面应用程序用户界面的框架。OpenTK 则为我们提供了强大的图形处理能力,包括 3D 图形渲染、数学计算等功能。将两者结合起来,可以在 WPF 应用程序中实…

Android音视频 MediaCodec框架-启动编码(4)

Android音视频 MediaCodec框架-启动编码 简述 上一节我们介绍了MediaCodec框架创建编码器流程,编解码的流程其实基本是一样的,只是底层的最终的实现组件不同,所以我们只看启动编码流程。 MediaCodec启动编码 从MediaCodec的start方法开始…

如何在 HarmonyOS NEXT 中使用 @Builder 装饰器优化 UI 组件的复用?

摘要 在鸿蒙 NEXT 开发中,Builder 装饰器是一种轻量级的 UI 元素复用机制,它允许开发者将重复使用的 UI 元素抽象成一个方法,并在 build() 方法中多次调用,以实现 UI 结构的复用。以下是如何使用 Builder 装饰器来优化 UI 组件复…

三种单例实现

1、不继承Mono的单例 实现 使用 注: 使用需要继承BaseManager 泛型填写自己本身 需要实现无参构造函数 2、挂载式的Mono单例 实现 使用 注: 使用需要继承SingletonMono 泛型填写自己本身 需要挂载在unity引擎面板 3、不用挂载式的单例 实现 使…