根据逆变的定义(将接受超类实例),我在下面的代码片段中的最后一条语句应该被接受;但它会抛出类型错误。请您纠正我的理解。
class A
class B extends A
class C extends B
abstract class Box[-T] {
def set(x : T) :Unit
}
val x = new Box[B] {
def set(b:B) = Console println "B"
}
val y = new Box[A] {
def set(a:A) = Console println "A"
}
val z = new Box[C] {
def set(c:C) = Console println "C"
}
x.set(new A) <-- Type error
不过 x.set(new C)
还好!因此,即使“逆变参数被接受为方法参数”实际上也是协变参数。