Как вы уже подозревали, вы тут все путаете.
С одной стороны, у вас есть List[+A]
, который говорит нам что-то об отношениях между List[A]
и List[B]
, учитывая отношения между A
и B
.Тот факт, что List
является ковариантным в A
, означает, что List[B] <: List[A]
, когда B <: A
, как вы уже знаете,
С другой стороны, List
подвергает метод map
изменить его «содержимое».Этот метод на самом деле не заботится о List[A]
, а только о A
с, поэтому дисперсия List
здесь не имеет значения.Ситуация, которая вас смущает, заключается в том, что существует некоторая подтипировка, которую необходимо принять во внимание: map
принимает аргумент (A => C
в данном случае, но это не совсем актуально) и, как обычно, с методами и функциямиВы всегда можете заменить его аргумент чем-либо, что является его подтипом.В вашем конкретном случае любой AcceptedType
будет в порядке, пока AcceptedType <: Function1[A,C]
.Здесь имеет значение дисперсия Function
, а не List
.