Selon la définition de covariance:Scala - Covariance
Q [+ B] signifie que Q peut prendre une classe, mais si A est une sous-classe de B, alors Q [A] est considéré comme un sous-classe de Q [B].
Voyons voir l'exemple suivant:
trait SomeA
trait SomeB extends SomeA
trait SomeC extends SomeB
case class List1[+B](elements: B*)
val a = List1[SomeA](new SomeA{},new SomeB{})
val b = List1[SomeB](new SomeB{},new SomeC{})
Tout va bien, mais je ne vois pas pourquoi List1[SomeB]
est une sous-classe de List1[SomeA]
, autrement dit pourquoi b est une sous-classe de a
?
Consultez le http://stackoverflow.com/questions/663254/pourquoi-dansnt-le-exemple-compile-aka-how-does-co-contra-and-in-variance-w. Je lis cette question et réponds plusieurs fois. –