密封的 class 有什么作用以及下面对 class 的解释
What does a sealed class do and explanation of the class below
我从事 android 开发已有一段时间了,但我一直期待学习新事物。
我在 Codelab 上看到了下面用于视图模型单元测试的代码。我真的很喜欢代码库的安排,但不理解下面的一些代码。
我想要一些关于创建具有如下地图类型的 class 的指导。
基本上我想知道 Result<*> 仍然与 Result 有何关系,以及为什么 class 只是 called/implemented 作为 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)
}
}
Result<*>.succeeded
是密封classResult
.
的扩展属性
查看 Kotlin 扩展指南:
我从事 android 开发已有一段时间了,但我一直期待学习新事物。
我在 Codelab 上看到了下面用于视图模型单元测试的代码。我真的很喜欢代码库的安排,但不理解下面的一些代码。
我想要一些关于创建具有如下地图类型的 class 的指导。
基本上我想知道 Result<*> 仍然与 Result 有何关系,以及为什么 class 只是 called/implemented 作为 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)
}
}
Result<*>.succeeded
是密封classResult
.
查看 Kotlin 扩展指南: