Kiedy używać symboli wieloznacznych w Java Generics?
to jest zHeadFirst Java: (strona 575)
To:
public <T extends Animal> void takeThing(ArrayList<T> list)
Robi to samo co to:
public void takeThing(ArrayList<? extends Animal> list)
Oto moje pytanie: jeśli są dokładnie takie same, dlaczego nie piszemy
public <? extends Animal> void takeThing(ArrayList<?> list)
lub
public void takeThing(ArrayList<T extends Animal> list)
Ponadto, kiedy byłoby użyteczne użycie? zamiast T w deklaracji metody (jak powyżej) w Generics lub w deklaracji klasy? Jakie są korzyści?