密封类中的 Kotlin 数据类

泽山沙比尔

我是科特林的新手。我正在尝试使用 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)
}
s1m0nw1

密封类是抽象的,不能被实例化。你应该实例化SuccessError代替。

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

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

Sealed Classes 是一种提供受限类层次结构的工具。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#中密封类的扩展方法

来自分类Dev

有没有办法从常规Kotlin类中识别出Kotlin数据类?

来自分类Dev

Scala中的类,对象,特质,密封特质

来自分类Dev

属性包含/排除Kotlin数据类

来自分类Dev

C ++中的密封类和虚拟继承

来自分类Dev

RealmObject的Kotlin数据类

来自分类Dev

Kotlin:实现者必须是数据类的接口?

来自分类Dev

实现Java接口的Kotlin数据类

来自分类Dev

kotlin数据类+ bean验证jsr 303

来自分类Dev

Kotlin中的类声明

来自分类Dev

Kotlin:密封类不能“包含”数据类吗?为什么?

来自分类Dev

Kotlin中数据类的Equals方法

来自分类Dev

Kotlin中带有ByteArray的数据类

来自分类Dev

Kotlin:函数式编程,密封类列表

来自分类Dev

Kotlin类中“ this”的目的

来自分类Dev

Kotlin中的深度合并数据类

来自分类Dev

Scala案例类与Kotlin数据类

来自分类Dev

Kotlin数据类的toString方法的混淆

来自分类Dev

在Quarkus的JSON响应中包含类名(Kotlin数据类)

来自分类Dev

在Kotlin中递归建立数据类

来自分类Dev

Kotlin中的密封类,不兼容类型错误无法返回父类型

来自分类Dev

UserLoginInfo-从密封的类中检索信息

来自分类Dev

具有派生属性的 Kotlin 数据类

来自分类Dev

为什么 CLR 中的某些类是密封的?

来自分类Dev

Kotlin 中数据类中的参数可以是 var 吗?

来自分类Dev

使用 Kotlin 密封类路由到不同的屏幕

来自分类Dev

Kotlin 数据类的扩展函数

来自分类Dev

Kotlin 多平台编程中的数据类

来自分类Dev

从 Json 到 Kotlin 数据类