自动播送密封子类失败-为什么? Rx Java 2可观察流onErrorReturn

时间:2018-12-17 11:25:37

标签: android kotlin observable viewmodel rx-java2

我想在今年结束时了解一些我今年还不清楚的东西。

我们正在使用密封类的子类,以将ViewModel的反馈反馈给UI。

因此,我们从类似以下内容开始:

sealed class LoginRoute {

    object LoginSuccessful : LoginRoute()

    object LoginFailed : LoginRoute()

    data class LoginError(val error: Throwable) : LoginRoute()
}

在ViewModel中,我们有一些rxJava2流,例如:

override val loginServiceStatusStream: Observable<LoginRoute> =
        loginServiceStatus
            .map { status ->
                if (status == Status.OK) {
                    LoginSuccessful
                } else {
                    LoginFailed
                }
            }
            .onErrorReturn {
                LoginError(it)
            }

我们实际遇到的情况:上面显示的Observable无法编译,因为一旦添加onErrorReturn,我们就必须为每个映射的返回值手动将强制类型转换添加到LoginRoute 。< / p>

赞:

override val loginServiceStatusStream: Observable<LoginRoute> =
            loginServiceStatus
                .map { status ->
                    if (status == Status.OK) {
                        LoginSuccessful as LoginRoute
                    } else {
                        LoginFailed as LoginRoute
                    }
                }
                .onErrorReturn {
                    LoginError(it)
                }

如果我们只是那样做(没有 onErrorReturn),一切都可以工作,而无需附加的 cast 声明:

override val loginServiceStatusStream: Observable<LoginRoute> =
                loginServiceStatus
                    .map { status ->
                        if (status == Status.OK) {
                            LoginSuccessful
                        } else {
                            LoginFailed
                        }
                    }

我真的很想知道为什么需要这种强制转换。
任何帮助表示赞赏。
谢谢,圣诞节快乐,新年快乐:)

0 个答案:

没有答案