首页 文章

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

提问于
浏览
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.SuccessResult 的向上转发,如下所示:

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

但我想知道是否可以使用构造函数引用进行此向上转换,类似于 Result::Success as Result

1 回答

  • 1

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

    你可以把它改成

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

    <Result> 使类型显式化 .

相关问题