Первый пример представляет собой обобщенный тип. Второй пример - параметризованный тип. Это разные вещи.
- Общий тип - это определение типа, параметризованного по типам. Он может быть вызван путем предоставления аргументов типа этим параметрам типа.
- Параметрированный тип - это вызов типичного типа с аргументами типа, независимо от того, являются ли эти аргументы типа или подстановочными.
Нижняя граница параметра типа универсального типа не может быть никакой пользы †. Поэтому это не «вещь» на Java.
Однако второй пример означает: «любая параметризация типа Gen<T>
, где аргумент типа является супертипом числа». Он полезен, поскольку он допускает полиморфность типичных типов.
† Они могут быть фактически ограничены в использовании, предоставляя "restricted instantiation", но не были сочтены полезными для разрешения.
'Полезно, поскольку он допускает полиморфность общих типов', есть ли другое использование параметризованного типа? –
@kevingomes. Подстановочные параметризованные типы относятся к полиморфизму. 'Gen