Очки Kotlin внутри закрытого класса - PullRequest
0 голосов
/ 29 мая 2018

Я новичок в котлине.Я пытаюсь обработать ошибки в rxjava с kotlin.Для этого я написал следующий запечатанный класс и некоторое расширение.

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?Так как его запечатанный класс, я не могу этого сделать.Ниже приведены расширения, которые я написал.

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

1 Ответ

0 голосов
/ 29 мая 2018

Запечатанные классы являются абстрактными и не могут быть созданы.Вместо этого лучше создать экземпляр Success или Error.

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

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

Запечатанные классы - это инструмент для предоставления иерархий ограниченных классов.

...