Почему Scala List может принимать ковариантный тип в качестве параметра в методе +=
Scala List объявлен как
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 является ковариантным, почему компилятор не жалуется, так как A появляется в контравариантной позиции в +:?
1 ответ
Решение
Потому что его полная подпись:
def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That
Документ, который вы упомянули в вопросе, является только упрощенным, вам нужно проверить полную подпись метода.