Kotlin 数据class 是密封的 class
Kotlin dataclasses inside sealed class
我是科特林的新手。我正在尝试使用 kotlin 处理 rxjava 中的错误。为此,我写了以下 sealed class 和一些扩展。
sealed class Result<out T> {
data class Success<out T>(val data: T) : Result<T>()
data class Error<out T>(val t: Throwable) : Result<T>()
}
如何实例化Result?由于它是密封的 class 我无法这样做。以下是我写的扩展。
fun <T> Observable<T>.retrofitResponseToResult(): Observable<Result<T>> {
return this.map { it.asResult() }
.onErrorReturn {
if (it is HttpException || it is IOException) {
return@onErrorReturn it.asErrorResult<T>()
} else {
throw it
}
}
}
fun <T> T.asResult(): Result<T> {
return Result(data = this, error = null)
}
fun <T> Throwable.asErrorResult(): Result<T> {
return Result(data = null, error = this)
}
Sealed classes 是抽象的,无法实例化。您应该改为实例化 Success
或 Error
。
fun <T> T.asResult(): Result<T> {
return Result.Success(this)
}
fun <T> Throwable.asErrorResult(): Result<T> {
return Result.Error(this)
}
Sealed 类 是一种用于提供受限 class 层次结构的工具。
我是科特林的新手。我正在尝试使用 kotlin 处理 rxjava 中的错误。为此,我写了以下 sealed class 和一些扩展。
sealed class Result<out T> {
data class Success<out T>(val data: T) : Result<T>()
data class Error<out T>(val t: Throwable) : Result<T>()
}
如何实例化Result?由于它是密封的 class 我无法这样做。以下是我写的扩展。
fun <T> Observable<T>.retrofitResponseToResult(): Observable<Result<T>> {
return this.map { it.asResult() }
.onErrorReturn {
if (it is HttpException || it is IOException) {
return@onErrorReturn it.asErrorResult<T>()
} else {
throw it
}
}
}
fun <T> T.asResult(): Result<T> {
return Result(data = this, error = null)
}
fun <T> Throwable.asErrorResult(): Result<T> {
return Result(data = null, error = this)
}
Sealed classes 是抽象的,无法实例化。您应该改为实例化 Success
或 Error
。
fun <T> T.asResult(): Result<T> {
return Result.Success(this)
}
fun <T> Throwable.asErrorResult(): Result<T> {
return Result.Error(this)
}
Sealed 类 是一种用于提供受限 class 层次结构的工具。