В Scala дисперсия может быть определена с помощью операторов дисперсии, таких как + и - для аргумента универсального типа. Например, тип List
является ковариантным в стандартной библиотеке.
class List[+A]
Таким образом, функция с ковариантным списком может быть определена следующим образом:
def foo[A](list : List[A])
Также можно эмулировать дисперсию с помощью общих границ. Так что мы также можем написать это
def foo[A](list : List[_:< A])
, конечно, это не имеет смысла, потому что list
уже ковариантен. Но тот же трюк можно проделать и с нековариантными типами. (например, Стек
). Конечно, новые типы также могут быть созданы из ковариантного стека (наследование агрегации).
Итак, мои вопросы:
заранее спасибо :)