Как будет использоваться контравариантность в дженериках Java?

В Java ковариация позволяет разработчику API указать, что экземпляр может быть обобщен как определенный тип или любой из его подтипов. Например:

List<? extends Shape> shapes = new ArrayList<Circle>(); 
// where type Circle extends Shape

Контравариантность идет другим путем. Это позволяет нам указать, что экземпляр может быть обобщен как определенный тип или супертип.

List<? super Shape> shapes = new ArrayList<Geometry>();
// where Shape extends Geometry

Чем полезна контравариантность Java-генерика? Когда бы вы выбрали его?

Ответы на вопрос(3)

Ваш ответ на вопрос