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

错误:逆变类型 T 出现在值 other 的类型 T 中的协变位置

然而这个成功了

class MMX[-T](x:T)

有什么区别?

谢谢

4

1 回答 1

2

正如 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它只是构造函数的参数,并且参数可以是逆变的,因此它可以工作。

于 2020-10-05T19:55:10.840 回答