【发布时间】:2021-01-12 03:35:25
【问题描述】:
在这段代码中,我很难理解为什么第一个编译而第二个不编译?
class Test11<T : Number> {
lateinit var test: MutableList<out T>.() -> Unit
}
fun main() {
val test: Test11<Int> = Test11<Int>()
val test2: Test11<out Number> = test
test.test.invoke(MutableList(3) { 55 }) // First
test2.test.invoke(MutableList(3) { 55 }) // Second
}
第二个说MutableList<Nothing>是预期的。
所以基本上在第一种情况下,T => Int 所以可能是out T => out Int => out Number。在第二种情况下,T => out Number 是 Number 的子类,那么仍然是 out T => out Number 对吗?
我无法理解为什么它不能按照这种逻辑工作......
【问题讨论】:
标签: kotlin generics covariance