说我们有以下几种类型:
abstract class Generic_B
interface Generic_A<Generic_B>
class Concrete_B : Generic_B()
class Concrete_A : Generic_A<Concrete_B>
fun main(args: Array<String>) {
val a = Concrete_A();
foo(a);
}
fun foo(thing: Generic_A<Generic_B>) {
}
我收到一条错误消息:
Error:(27, 9) Kotlin: Type mismatch: inferred type is Concrete_A but Generic_A<Generic_B> was expected
我不太了解该错误。
Concrete_A
是Generic_A
的实例,并且在Generic_B
的具体实例上也已参数化。因此,我觉得类型推断应该匹配。
我想我的问题是:
答案 0 :(得分:4)
基本上,您刚遇到Generic_A<Generic_B>
与Generic_A<Concrete_B>
扩展的Concrete_A
不同的问题。
如果将out
方差添加到thing
参数通用部分,您将使其正常工作,因为它将接受Generic_B
的所有子类型:
fun foo(thing: Generic_A<out Generic_B>) {
}