Я понимаю, что указание дисперсии для универсальных шаблонов в C # происходит на уровне объявления типа: когда вы создаете свой универсальный тип, вы указываете дисперсию для аргументов типа. В Java, с другой стороны, дисперсия указывается там, где используется универсальный тип: когда вы создаете переменную некоторого универсального типа, вы указываете, как могут изменяться аргументы ее типа.
Каковы плюсы и минусы каждого варианта?