Это параметр верхнего ограниченного типа. Нижние границы создаются с помощью super
, что вы действительно не можете сделать для параметра типа. У вас не может быть параметра нижнего ограниченного типа .
И это будет иметь значение, если вы, например, хотите передать List
. Итак, для следующих двух методов:
public void doSomething(List foos) {}
public void doSomething(List foo) {}
И для данного класса:
class Bar extends Foo { }
Следующий вызов метода:
List list = new ArrayList();
doSomething(list);
равен действителен для первого метода, но не для второго метода. Второй метод терпит неудачу, потому что List
не является супер-типом List
, хотя Foo
является супер-типом Bar
. Тем не менее, первый метод проходит, потому что параметр типа T
будет выведен как Bar
.