gpt4 book ai didi

kotlin - 在Kotlin中将密封类与rxjava一起使用时获取类型不匹配

转载 作者:行者123 更新时间:2023-12-04 18:56:38 26 4
gpt4 key购买 nike

我有以下代码

sealed class AddressUiState
object AddressLoading : AddressUiState()
class AddressLoadedState(val addressResponse: AddressBookResponse) : AddressUiState()
class AddressErrorState(val error: Throwable) : AddressUiState()

我有如下的ViewModel
class AddressViewModel constructor(private val service: SingleProfileService) : ViewModel() {

fun getDisplayableAddressState(id: String): Observable<out AddressUiState> {
return service.getAddresses(id)
.map { AddressLoadedState(it) }
.startWith(AddressLoading)
.onErrorReturn { AddressErrorState(it) }
.subscribeOn(Schedulers.io())

}
}

我看到编译错误和错误的onErrorReturn
类型不匹配。必填:AddressLoadedState!找到:AddressErrorState
上面的代码有什么问题?

最佳答案

在你的代码中

.map { AddressLoadedState(it) }

给一个
Observable<AddressLoadedState>

onError函数需要一个接受异常并返回扩展T的函数。
Observable<T> onErrorReturn(Func1<? super Throwable, ? extends T> resumeFunction)

在这种情况下,T为AddressLoadedState。 AddressErrorState不会对此进行扩展,因此编译器会提示。

您可以将语句分成多行来帮助编译器,以表明T实际上是一个AddressUiState。或者,您也可以像这样在map函数本身上告诉编译器:
    return service.getAddresses(id)
.map<AddressUiState> { AddressLoadedState(it) }
.startWith(AddressLoading)
.onErrorReturn { AddressErrorState }
.subscribeOn(Schedulers.io())

关于kotlin - 在Kotlin中将密封类与rxjava一起使用时获取类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51036765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com