Object
. Поэтому неограниченный wildcard <?>
всегда подразумевает его в качестве верхней границы. Оба этих типа в рантайме сотрутся в List<Object>
, функциональных отличий нет.Не смотря на одинаковое поведение, существует одно синтаксическое различие. Неограниченный дженерик – reifiable тип. Это значит, что он представлен в рантайме. Такой тип можно использовать в операторе
instanceof
, тогда как синтаксическая конструкция x instanceof List<? extends Object>
приведет к ошибке компиляции.Тип List без параметра имеет больше отличий, мы уже говорили о них ранее, в публикациях про raw types и проблему heap pollution.