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
只是构造函数的一个参数,而且参数可以是反变量的,所以它可以工作。