Kotlin 密封类 Sealed的总结

概念
sealed修饰的类 在kotlin中是密封类 密封类 描述的是 父类和子类的关系
1、密封类和它的子类必须定义在一个文件中,而在kotlin1.0的时候 密封类的子类必须定义在密封类 里面
2、Sealed types cannot be instantiated 密封类是不能被初始化的
如何理解 这个父类和子类的关系呢?
可以这样理解 父类 只是一个组织者(对于子类来说)(除了这个功能它什么也做不了)甚至初使化都做不到,具体可以出面做事情的 是子 类
一个密封类:

sealed class LoadResult<Key:Any,Value:Any> {
    data class Error<Key:Any,Value:Any>(val throwable: Throwable):LoadResult<Key,Value>()
    data class Page<Key:Any,Value:Any> constructor(
        /**
         * Loaded data
         */
        val data: List<Value>,
        /**
         * [Key] for previous page if more data can be loaded in that direction, `null`
         * otherwise.
         */
        val prevKey: Key?,
        /**
         * [Key] for next page if more data can be loaded in that direction, `null` otherwise.
         */
        val nextKey: Key?,
        /**
         * Optional count of items before the loaded data.
         */
    ):LoadResult<Key,Value>()
}

使用:

fun main() {
//    LoadResult<Int,String>(); //会报错 因为密封类不能被初使化
    println("懂了吗")
    functionTest()
}
fun functionTest (): LoadResult<Int,String> {
    //虽然返回类型是LoadResult但是我们只能返回其子类 因为密封类不能被初使化
    var exception:Exception = Exception("")
    return  LoadResult.Error(exception)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容