就像我在评论中说的,
T
被推断为
Any
drainToSink
打电话。
自从kotlin
List
严格来说,它是一个生产者,因为它是不可变的,所以它将其类型参数声明为
out E
List<Any>
作为的参数类型
,分配一个
List<String>
对此:
val strings = emptyList<String>()
val x: List<Any> = strings // works
MutableList<T>
,它没有协变类型参数
做
fun <T> drainToSink(collection: MutableList<T>, sink: Sink<T>) {
....
}
val strings = emptyList<String>()
drainToSink(strings, sink) // type mismatch: Required: MutableList<Any>, Found: List<String>