我想修复一个类型不匹配的编译器错误,我从下面的代码中得到,其中类型推断并不是我想要的。我有一个密封的类和一个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&lt; @ParameterName Throwable,Result.Failure&gt;但是功能!预计
我可以通过显式指定mapper函数返回类型来修复错误,这类型是从推断类型Result.Success
到Result
的向上转换,如下所示:
logs.map({ logs ->
Result.Success(logs) as Result
})
但我想知道使用构造函数引用是否可以进行这种向上转换,例如Result::Success as Result
答案 0 :(得分:1)
问题在于推断类型。因为logs.map(Result::Success)
推断的是Success
类型,而不是Result
。比.onErrorReturn(Result::Failure)
失败,因为它是Failure
类型。
您可以将其更改为
logs.map<Result>(Result::Success)
.onErrorReturn(Result::Failure)
<Result>
使类型明确。