Kotlin 密封类与接口

密封的类和接口表示受限制的类层次结构,这些层次结构提供了对继承的更多控制;在定义密封类的模块和包之外,不能出现其他子类;密封类的每个实例都有一个来自有限集的类型,该类型在编译此类时是已知的;一旦编译了具有密封接口的模块,就不会出现新的实现

密封类类似于枚举类:枚举类型的值集也受到限制,但每个枚举常量仅作为一个实例存在,而密封类的子类可以有多个实例,每个实例都有自己的状态

使用 sealed 声明密封的类或接口

Kotlin 复制代码
sealed interface Error

sealed class IOError(): Error

class FileReadError(val file: File): IOError()
class DatabaseError(val source: DataSource): IOError()

object RuntimeError : Error

使用密封类的关键好处在于使用 when 表达式的时候;如果能够验证语句覆盖了所有情况,就不需要为该语句再添加一个 else 子句

Kotlin 复制代码
fun log(e: Error) = when(e) {
    is FileReadError -> { println("Error while reading file ${e.file}") }
    is DatabaseError -> { println("Error while reading from database ${e.source}") }
    is RuntimeError ->  { println("Runtime error") }
    // 不再需要 `else` 子句,因为已经覆盖了所有的情况
}
相关推荐
一丝晨光2 天前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符
消失的旧时光-19432 天前
kotlin的密封类
android·开发语言·kotlin
AntDreamer2 天前
在实际开发中,如何根据项目需求调整 RecyclerView 的缓存策略?
android·java·缓存·面试·性能优化·kotlin
极客先躯3 天前
java和kotlin 可以同时运行吗
android·java·开发语言·kotlin·同时运行
滴水成冰-4 天前
Kotlin-Flow学习笔记
笔记·学习·kotlin
_Shirley5 天前
android.view.InflateException: Binary XML file line #7: Error inflating class
android·xml·java·ide·kotlin·android studio
ChinaDragonDreamer5 天前
Kotlin:1.9.0 的新特性
android·开发语言·kotlin
帅次7 天前
Android Studio:驱动高效开发的全方位智能平台
android·ide·flutter·kotlin·gradle·android studio·android jetpack
深海呐7 天前
Android 用线程池实现一个简单的任务队列(Kotlin)
android·kotlin·线程池·延时任务队列·线程池延时任务
我命由我123458 天前
Kotlin 极简小抄 P2(插值表达式、运算符、选择结构赋值)
android·java·开发语言·后端·kotlin·安卓