В соответствии с определением ковариационной:Скала - ковариационная
Q [+ B] означает, что Q может принимать любой класс, но если А представляет собой подкласс В, затем Q [А] считается подкласс Q [B].
Давайте посмотрим на следующий пример:
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{})
Все это хорошо, но я не понимаю, почему List1[SomeB]
подкласс List1[SomeA]
, или другими словами, почему б подкласс a
?
Ознакомьтесь с http://stackoverflow.com/questions/663254/why-doesnt-the-example-compile-aka-how-does-co-contra-and-in-variance-w. Я читал этот вопрос и отвечал несколько раз. –