На самом деле, переменная List< ? super Animal >
список неизвестного типа A
элемента, который является суперкласс Animal
. Поэтому вы можете сделать с ним все, что только нужно сделать для этого предположения.
Методы этого класса, которые принимают параметры типа A
, такие как add()
, может принять любой аргумент, который имеет тип A
или любого подкласса этого. Dog
, являющийся подклассом Animal
, поэтому должен быть подклассом A
.
Методы, которые возвращают типа A
, такие как get()
, совершенно бесполезны, так как единственное, что мы знаем о том, что A
это суперкласс Animal
.
Так почему бы вам использовать эту конструкцию?
Ну, вы не использовали бы его как представлено. Вместо этого рассмотрим пример SortedSet<T>
. Вы можете предоставить Comparator< ? super T >
одному из своих конструкторов, поскольку единственным методом компаратора, который когда-либо используется, является акцепторный метод (compare()
).
Это означает, что вы можете создать отсортированный набор животных, отсортированный набор клыков или отсортированный набор собак с использованием того же компаратора животных.
Спасибо, но я не хорошо разбираюсь в java 7. Я просто хочу посмотреть, как ключевое слово super в основной родовой работе. то есть, согласно спецификации java, в нем говорится, что при использовании ключевого слова super оно должно принимать все, что супер или равно классу. Например, если скажем '? extends Animal ', тогда он должен принять класс Animal или object. Но я вижу, что он также принимает класс «Собака», который является подклассом Animal. Который не должен быть принят. Невозможно получить четкое представление об этом. Было бы здорово, если бы вы могли пролить свет на это. – user2082928
Вы правы. Я думал о расширении ... почему вы пытаетесь это сделать? –