это от HeadFirst Java: (стр. 575)
Это:
public <T extends Animal> void takeThing(ArrayList<T> list)
Делает то же самое, что и это:
public void takeThing(ArrayList<? extends Animal> list)
Итак, вот мой вопрос: если они точно такие же, почему мы не пишем
public <? extends Animal> void takeThing(ArrayList<?> list)
или
public void takeThing(ArrayList<T extends Animal> list)
Также, когда было бы полезно использовать? вместо T в объявлении метода (как указано выше) с Generics или для объявления класса? Каковы преимущества?