【发布时间】:2019-01-15 05:33:33
【问题描述】:
我有以下Call 接口,它是不变的,在另一个类中我想调用它的一个函数,但是在currentCall?.refresh(result) 这一行中出现以下错误。
Type mismatch: inferred type is List<Any?> but List<Nothing> was expected.
Projected type Call<*>? restricts use of public abstract fun refresh(list: List<T>): Unit defined in
我了解,使用星形投影,类型会变得未知,并且使用它是不安全的。我不知道改变结构并允许此操作的最佳方法是什么。
在这种情况下你会怎么做?例如,您将如何刷新数据?
interface Call<T> {
fun provider(): Provider<T>
fun items(): List<T>
fun refresh(list: List<T>)
}
interface Provider<T> {
fun enqueue(result: (List<T>) -> Unit)
}
class Main {
private var currentCall: Call<*>? = null
fun <T> add(provider: Provider<T>){}
fun onStart() {
currentCall?.provider()?.enqueue { result ->
currentCall?.refresh(result)
}
}
}
【问题讨论】: