Nella sezione generici di Effective Java di Bloch (che è facilmente il capitolo "libero" disponibile per tutti: link ), dice:
If a type parameter appears only once in a method declaration, replace it with a wildcard.
(Vedi pagina 31-33 di quel pdf)
La firma in questione è:
public static void swap(List<?> list, int i, int j)
vs
public static void swap(List<E> list, int i, int j)
E quindi procede ad utilizzare una funzione "helper" statica privata con un parametro di tipo effettivo per eseguire il lavoro. La firma della funzione di supporto è ESATTAMENTE quella della seconda opzione.
Perché è preferibile il carattere jolly, dal momento che NON è necessario utilizzare un carattere jolly per eseguire comunque il lavoro? Capisco che in questo caso dal momento che sta modificando l'Elenco e non è possibile aggiungere a una raccolta con un carattere jolly illimitato, quindi perché utilizzarlo a tutti?