Как я понял, вместо подставить можно любой тип (кроме примитивов), зачем тогда есть ?
<?>
и <? extends Object>
являются синонимами, как и ожидается, но есть несколько случаев с дженериками, где extends Object
фактически не является избыточным. Например, <T extends Object & Foo>
приведет к тому, что T
станет объектом при стирании, тогда как с <T extends Foo>
он станет Foo
при стирании. (Это может иметь значение, если вы пытаетесь сохранить совместимость с API-интерфейсом предварительного генерации, который использовал Object).
(Здесь: http://download.oracle.com/javase/tutorial/extra/generics/convert.html; объясняется, почему класс java.util.Collections
JDK имеет метод с этой сигнатурой:
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
Сссылка на источник SO: What's the difference between <?>
and <? extends Object>
in Java Generics?
По сути, разницы нет. Но по дефолту любой класс наследуется от Object
и ? extends Object
можно не писать.
<? extends T>
ArrayList<? extends Number>
... и тд. можем в реализации записать как <Integer>
, но не сможем как <Object>
<? super T>
ArrayList<? super Number>
... и тд. можем в реализации записать как <Object>
, но не сможем как <Integer>
Вся красота полиморфизма.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть чатподскажите пожалуйста как можно шифровать сообщения в базе? но зашифровать так что бы можно было расшифровать