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

How to upcast return value of a a constructor

我想修复从以下代码中得到的类型不匹配编译器错误,其中类型推断没有按照我的要求进行。我有一个密封的 class 和一个 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)

Type mismatch: inferred type is KFunction1<@ParameterName Throwable, Result.Failure> but Function! was expected

我可以通过显式指定映射器函数 return 类型来修复错误,这是一种从推断类型 Result.SuccessResult 的向上转换,如下所示:

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

但我想知道这种向上转换是否可以通过构造函数引用实现,比如 Result::Success as Result

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

你可以改成

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

<Result> 使类型明确。