class Contravariant[-T](val other:T)
错误:逆变类型 T 出现在值 other 的类型 T 中的协变位置
然而这个成功了
class MMX[-T](x:T)
有什么区别?
谢谢
class Contravariant[-T](val other:T)
错误:逆变类型 T 出现在值 other 的类型 T 中的协变位置
然而这个成功了
class MMX[-T](x:T)
有什么区别?
谢谢
正如 Luis Miguel Mejía Suárez所说,在第一个示例中,other
是一个域,并且域不能是逆变的(正如Dmytro Mitin指出的,不是带有修饰符private[this]
or的域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
它只是构造函数的参数,并且参数可以是逆变的,因此它可以工作。