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

时间:2018-06-26 07:03:36

标签: kotlin rx-java rx-java2

我有以下代码

Private Sub CommandButton1_Click()

Dim rng As Range
Dim rng2 As Range
Dim lastrow As Long

lastrow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1

Set rng = ActiveSheet.Range("N1:BI1").Find(What:=year, LookAt:=xlWhole, SearchDirection:=xlPrevious)
If Not rng Is Nothing Then
  Set rng2 = ActiveSheet.Range(Cells(lastrow, rng.Column), Cells(2, rng.Column + 11)).Find(What:=month, LookAt:=xlWhole, SearchDirection:=xlPrevious)
  If Not rng2 Is Nothing Then
' Here Code adds Value for the New Row.
End If

'Find the First Empty Column in the last added Row
fColumn = ActiveSheet.Cells(lastrow, Columns.Count).End(xlToLeft).Column - 7

'Color the last Cell of the added Row
rowIdx = Columns(fColumn).Find(What:="MFG", LookAt:=xlWhole, MatchCase:=False).Row
colorToCopy = Range("R" & rowIdx).Interior.Color

farbe = ActiveSheet.Cells(lastrow, rng2.Column).Find(What:="DEL", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column - 6
ActiveSheet.Cells(lastrow, farbe).Interior.Color = colorToCopy
End Sub

我有如下的ViewModel

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

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

1 个答案:

答案 0 :(得分:3)

在您的代码中

.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())