如何向上转换构造函数的 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.Success
到 Result
的向上转换,如下所示:
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>
使类型明确。
我想修复从以下代码中得到的类型不匹配编译器错误,其中类型推断没有按照我的要求进行。我有一个密封的 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.Success
到 Result
的向上转换,如下所示:
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>
使类型明确。