En la sección de genéricos de Bloch's Effective Java (que es el capítulo "gratuito" disponible para todos: http://java.sun.com/docs/books/effective/generics.pdf ), dice:
Si un parámetro de tipo aparece solo una vez en una declaración de método, reemplácelo con un comodín.
(Ver páginas 31-33 de ese pdf)
La firma en cuestión es:
public static void swap(List<?> list, int i, int j)
vs
public static void swap(List<E> list, int i, int j)
Y luego procede a utilizar una función privada "auxiliar" estática con un parámetro de tipo real para realizar el trabajo. La firma de la función auxiliar es EXACTAMENTE la de la segunda opción.
¿Por qué es preferible el comodín, ya que NO necesita usar un comodín para hacer el trabajo de todos modos? Entiendo que en este caso ya que está modificando la Lista y no se puede agregar a una colección con un comodín ilimitado, entonces, ¿por qué usarlo?