我想在今年结束时了解一些我今年还不清楚的东西。
我们正在使用密封类的子类,以将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
),一切都可以工作,而无需
override val loginServiceStatusStream: Observable<LoginRoute> =
loginServiceStatus
.map { status ->
if (status == Status.OK) {
LoginSuccessful
} else {
LoginFailed
}
}
我真的很想知道为什么需要这种强制转换。
任何帮助表示赞赏。
谢谢,圣诞节快乐,新年快乐:)