Od Effective Java Rozdział 5 (rodzajowych):Rodzaj vs bezgranicznej zamiennika
// Two possible declarations for the swap method public static <E> void swap(List<E> list, int i, int j); public static void swap(List<?> list, int i, int j);
Która z tych dwóch deklaracji jest lepsze i dlaczego? W publicznym interfejsie API drugi jest lepszy, ponieważ jest prostszy. Przekazujesz listę - dowolną listę - a metoda zamienia zindeksowane elementy. Nie ma niepotrzebnego parametru typu. Z reguły jeśli parametr typu pojawia się tylko raz w deklaracji metody, zastąp go symbolem wieloznacznym.
Nie rozumiem, dlaczego druga opcja jest prostsza dla klienta mojego API? Mogę przekazywać te same parametry do pierwszej i drugiej metody. Również drugi wymaga metody pomocniczej do przechwytywania symboli wieloznacznych. Czy ktoś może wyjaśnić, dlaczego drugi jest zalecany? Dzięki!
Możliwe odpowiedzi: http://stackoverflow.com/questions/6231973/difference-between-list-list-list-liste-and-listobject?rq=1 –