繁体   English   中英

密封类内部的Kotlin数据类

[英]Kotlin dataclasses inside sealed class

我是科特林的新手。 我正在尝试使用Kotlin处理rxjava中的错误。 为此,我写了以下密封类和一些扩展。

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>()
}

如何实例化结果? 由于它的密封类,我无法这样做。 以下是我写的扩展。

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)
}

密封的类是抽象的,无法实例化。 您应该改为实例化SuccessError

fun <T> T.asResult(): Result<T> {
    return Result.Success(this)
}

fun <T> Throwable.asErrorResult(): Result<T> {
    return Result.Error(this)
}

密封类是用于提供受限类层次结构的工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM