2017-09-29 1 views
0

タイプ推論が私の望んでいない次のコードからタイプミスマッチコンパイラエラーを修正したいと思います。コンストラクタの返り値をアップキャストする方法

sealed class Result { 
    data class Success(val logs: List<Log>) : Result() 
    data class Failure(val throwable: Throwable) : Result() 
    object InFlight : Result() 
} 

val logs: Observable<List<Log>> = getLogs() 
logs.map(Result::Success) 
    .onErrorReturn(Result::Failure) 

型の不一致:推論タイプはKFunction1 < @ParameterNameたThrowable、Result.Failure>が、関数である私は、密封されたクラスとrxjavaストリームを持っています!

 logs.map({ logs -> 
      Result.Success(logs) as Result 
     }) 

しかし、この場合、私は思っていた:私は、明示的にそうよう Resultに推論された型の Result.Successからのアップキャストの一種であるマッパー関数の戻り値の型を指定することで、エラーを修正することができます

を期待されていましたアップキャストはコンストラクタ関数参照などで可能です。Result::Success as Result

答えて

1

問題は推論型です。 logs.map(Result::Success)Resultの代わりにSuccessの型を引きます。 Failureタイプであるため、.onErrorReturn(Result::Failure)が失敗します。

あなたは<Result>はタイプが明示的になり

logs.map<Result>(Result::Success) 
    .onErrorReturn(Result::Failure) 

にそれを変更することができます。

+0

完璧、ありがとうございます! – vlazzle

関連する問題