[英]Difference between 2 class definitions regarding contravariant type?
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]
或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
只是構造函數的參數,並且參數可以是逆變的,因此它可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.