簡體   English   中英

關於逆變類型的 2 個類定義之間的區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM