如何向上转换构造函数的返回值

时间:2017-09-29 01:23:34

标签: kotlin rx-java rx-java2

我想修复一个类型不匹配的编译器错误,我从下面的代码中得到,其中类型推断并不是我想要的。我有一个密封的类和一个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.SuccessResult的向上转换,如下所示:

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

但我想知道使用构造函数引用是否可以进行这种向上转换,例如Result::Success as Result

1 个答案:

答案 0 :(得分:1)

问题在于推断类型。因为logs.map(Result::Success)推断的是Success类型,而不是Result。比.onErrorReturn(Result::Failure)失败,因为它是Failure类型。

您可以将其更改为

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

<Result>使类型明确。