sealed class-kotlin中的封闭类

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

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

Kotlin 复制代码
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.UnknownError

    handleError(error1) // 输出: Network error: Unable to connect to server
    handleError(error2) // 输出: Timeout after 5000 ms
    handleError(error3) // 输出: An unknown error occurred
}
  • 子类 : NetworkErrorTimeoutErrorError 的子类,表示具体的错误类型。UnknownError 是一个对象表示特定的错误状态。
  • 类型安全 : 使用 when 表达式处理错误时,编译器会确保覆盖所有可能的子类,减少了遗漏处理某些错误的风险。
  • 扩展性: 如果需要增加新的错误类型,只需在同一文件中添加新的子类,保持代码结构的清晰性。
相关推荐
年小个大1 小时前
受 go-zero 启发,我给 Flutter 整了套 MVI-BLoC 脚手架
android·flutter·架构
delta_hell4 小时前
【阅读源码-Android】动画之AnimatorSet--2
android·源码·animatorset
叶辞树8 小时前
Android CLI
android
我命由我1234510 小时前
Android 开发问题:unexpected element <service> found in <manifest>
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
程思扬10 小时前
Android ANR实战排查:主线程SystemClock.sleep导致页面启动偶现无响应
android·笔记
码农coding11 小时前
android12 InputManagerService分析之输入事件如何回到应用层
android
zhangguojia711 小时前
从一个窗口覆盖问题出发,理解 Android Window 的层级与权限
android
古法安卓14 小时前
Android-SELinux 策略调试实战:从 AVC 日志到策略修复
android·java·android studio
Dovis(誓平步青云)15 小时前
DevEco Studio 6.1.1 Windows 安装实录:从下载校验到首次启动
android·开发语言·数据库·人工智能·windows·harmonyos
Zender Han15 小时前
Flutter 自适应(Adaptive)与响应式(Responsive)设计实践:官方推荐方案详解
android·flutter·ios