2015-12-12 1 views
2

Список Скала объявлен какПочему Список Scala может занять ковариантный тип, как paramenter в методе + =

sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with  Product with GenericTraversableTemplate[A, List] with LinearSeqOptimized[A, List[A]] with java.io.Serializable 

Способ предварять элемент в список объявлен как

def +:(elem: A): List[A] 

В качестве типа А является ковариантным, почему компилятор не жалуется, так как A появляется в контравариантном положении в + :?

+0

не могли бы вы повторить свой вопрос, я не уверен, что вы спрашиваете –

+1

Мне было интересно, почему подпись метода +: класса List не нарушает правила использования коварианта. – Chen

ответ

3

Поскольку его полная подпись:

def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That 

Док, что вы упомянули в вопросе только упрощенный один, вам нужно проверить полную сигнатуру метода.

Смежные вопросы