sealed class-kotlin中的封闭类

news/2024/10/24 1:04:18/

在 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/news/1541477.html

相关文章

CentOS7安装RabbitMQ-3.13.7、修改端口号

本文安装版本: Erlang:26.0 官网下载地址 Erlang RabbitMQ:3.13.7 官网下载地址 RabbitMQ RabbitMQ和Erlang对应关系查看:https://www.rabbitmq.com/which-erlang.html 注:安装erlang之前先安装下依赖文件&#xff0…

rabbitmq 工作队列模式

工作队列模式 一、原理流程图 二、基本知识 工作队列模式(Work Queue Model)是一种消息队列模型,生产者将任务分发到队列中,多个消费者从队列中按顺序获取并处理任务。该模式主要用于负载均衡,确保任务能够均匀分配给…

VScode分文件编写报错 | 如何进行VScode分文件编写 | 小白也能轻松解决版

分文件编写遇到的问题 分文件编写例子如下所示: 但是直接使用 Run Code 或者 调试C/C文件 会报错如下: 正在执行任务: C/C: g.exe 生成活动文件 正在启动生成… cmd /c chcp 65001>nul && D:\Librarys\mingw64\bin\g.exe -fdiagnostics-col…

九、pico+Unity交互开发——触碰抓取

一、VR交互的类型 Hover(悬停) 定义:发起交互的对象停留在可交互对象的交互区域。例如,当手触摸到物品表面(可交互区域)时,视为触发了Hover。 Grab(抓取) 概念&#xff…

word中的内容旋转90度

在vsto、Aspose.Words 中,默认没有直接的 API 可以让表格整体旋转 90 度。然而,我们可以通过一些方式来实现类似的效果,具体思路如下: 将表格插入到一个形状(Shape)或文本框中,然后旋转该形状。…

基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…

|人口分析|007_django基于Python的广东省人口流动数据分析2024_92306i61

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…

Python数据类型详解:10个你必须掌握的类型

Python 是一种动态类型语言,这意味着变量的类型是在运行时确定的。Python 提供了多种内置数据类型,用于存储和操作不同类型的数据。以下是 10 个你必须掌握的 Python 数据类型,每个类型都附有示例代码。 1. 数字类型(Numeric Typ…