Я думаю, что полезно не думать о List<Integer>
как о "списке из Integer
s".
Вместо этого думайте об этом как о List
;но вы также дали указание компилятору прекратить вводить что-либо, кроме Integer
(или подкласса, или нуль), и запретить вынимать что-либо, кроме Integer
(или ноль).
Если вы думаете об этом так, вы избавляетесь от мысли, что «вы можете определить тип List
». Это просто List
.Информация о Integer
существует только во время компиляции.
Даже если список не пустой, вы не можете точно сказать, что такое «тип» списка: непустой List<Object>
может содержать только экземпляры Integer
.Таким образом, вы можете определить только нижнюю границу типа.