2017-09-29 58 views
0

我想解決這個問題,我從下面的代碼,其中,類型推斷是沒有做我想要的得到一個類型不匹配的編譯器錯誤。我有一個密封類和rxjava流:如何上溯造型的返回值的構造

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>但功能!預計

我可以明確地指定映射函數的返回類型,它是從推斷類型Result.Success排序上溯造型到Result像這樣修復錯誤:

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

但我在想,如果這上溯造型是可能的構造函數的引用,類似Result::Success as Result

回答

1

的問題是在推斷出的類型。由於logs.map(Result::Success)推斷類型Success,而不是Result。比.onErrorReturn(Result::Failure)失敗,因爲它是一個Failure類型。

你可以把它改成

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

<Result>使型明確。

+0

完美,謝謝! – vlazzle