// 使用密封类处理请求结果 funhandleResult(result: NetworkResult<Int>) { // when 语句会强制检查所有子类,避免遗漏 when (result) { is NetworkResult.Loading -> println("正在加载...") is NetworkResult.Success -> println("请求成功,数据:${result.data}") is NetworkResult.Error -> println("请求失败:${result.message}") } }
funmain() { val loading = NetworkResult.Loading val success = NetworkResult.Success(200) val error = NetworkResult.Error("网络超时") handleResult(loading) // 输出:正在加载... handleResult(success) // 输出:请求成功,数据:200 handleResult(error) // 输出:请求失败:网络超时 }
与其他类型的对比
类型
特点
适用场景
密封类
子类固定,可携带数据,灵活
复杂状态管理(如 UI 状态、请求结果)
枚举(enum)
实例固定,不可携带动态数据
简单的标签式状态(如颜色、类型)
普通类
可自由继承,无限制
需要灵活扩展的类层次结构
可见修饰符
private:同一类或文件(针对包级别定义)中可见
protected:同private 加子类可见
internal:在同一个模块中可见(如果声明范围的所有者是可见的)
public:公共,所有都可见
单例
1 2 3 4 5
object MyClass{ funaa(){ } }
那么MyClass.aa()其实就是调用单例的aa方法
继承
open 关键字用于声明一个可以被继承或者被子类重写的类、方法或者属性。
Kotlin 中的类、方法、属性默认是不可继承或重写的,如果你希望某个类可以被其他类继承,或者某个方法或属性可以在子类中被重新实现,就需要使用 open 关键字来进行声明。