关于逆变类型的两个类定义之间的差异


class Contravariant[-T](val other:T)

错误:反变量类型T发生在其他值的类型T的协变位置

然而,这一次成功了

class MMX[-T](x:T)

有什么区别?

感谢

正如Luis Miguel Mejía Suárez所说,在第一个例子中,other是一个域,域不能是逆变的(正如Dmytro Mitin所指出的,不是带有修饰符private[this]protected[this]的域(,尽管它们可以是协变的。考虑这个例子,假设你的第一个例子有效:

class Contravariant[-T](val other: T)
val stringList = List[Contravariant[String]](new Contravariant[Any](1))
val string: String = stringList.head.other //This can't work, because 1 is not a String

在这里您可以看到发生了什么(我使用@uncheckedVariance使其工作(。

在第二个例子中,x只是构造函数的一个参数,而且参数可以是反变量的,所以它可以工作。

最新更新