密封类的作用和下面的类的解释

问题描述 投票:0回答:1

我已经进行了一段时间的android开发,但是我一直很期待学习新事物。

我在Codelab上遇到了下面的代码,用于ViewModel单元测试。我真的很喜欢代码库,但是不理解下面的代码。

我希望获得有关创建具有如下地图类型的类的一些指导。

[基本上,我想知道Result 仍如何与Result相关以及为什么只将类作为Success(it)调用/实现。

我将感谢您的指导。

sealed class Result<out R> {


    data class Success<out T>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : Result<Nothing>()
    object Loading : Result<Nothing>()

    override fun toString(): String {
        return when (this) {
            is Success<*> -> "Success[data=$data]"
            is Error -> "Error[exception=$exception]"
            Loading -> "Loading"
        }
    }
}

/**
 * `true` if [Result] is of type [Success] & holds non-null [Success.data].
 */
val Result<*>.succeeded
    get() = this is Success && data != null

//implementation
 override fun observeTask(taskId: String): LiveData<Result<Task>> {
        return tasksDao.observeTaskById(taskId).map {
            Success(it)
        }
    }
android kotlin android-testing google-codelab
1个回答
0
投票

[Result<*>.succeeded是密封类Result的扩展属性。

查看Kotlin扩展指南:

https://kotlinlang.org/docs/reference/extensions.html

© www.soinside.com 2019 - 2024. All rights reserved.