Ответ 1
Это делает небольшую разницу, когда общий параметр ограничен. Например, если у вас
class BoundedIterable[+A <: Something]
class BoundedGrowable[-A >: Something]
тогда введите BoundedIterable[Any]
и BoundedGrowable[Nothing]
будет незаконным.
Я не знаю, есть ли другая разница, но я могу с уверенностью сказать, что вам следует выбирать вариант без подстановочных знаков, где это возможно. Это потому, что на самом деле сама цель дисперсии типа объявления-сайта заключается в том, чтобы избавиться от подстановочных знаков (которые являются формой дисперсии использования-сайта). Когда вы говорите List[Any]
, вы имеете в виду "список чего угодно", но когда вы говорите List[_]
, значит, вы имеете в виду "список мы-не-знаем-что". Таким образом, первое является более понятным, хотя в каком-то конкретном случае они могут быть эквивалентны.