¿Por qué utilizar un método auxiliar de captura de comodines?

Refiriéndose a :Métodos auxiliares de captura de comodines

Dice crear un método auxiliar para capturar el comodín.

public void foo(List<?> i) {
    fooHelper(i);
}        
private <T> void fooHelper(List<T> l) {
    l.set(0, l.get(0));
}

Solo usando esta función a continuación solo no produce ningún error de compilación, y parece funcionar de la misma manera. Lo que no entiendo es: ¿por qué no usarías esto y evitarías usar un ayudante?

public <T> void foo(List<T> l) {
    l.set(0, l.get(0));
}

Pensé que esta pregunta realmente se reduciría a: ¿cuál es la diferencia entre comodín y genéricos? Entonces, fui a esto:diferencia entre comodines y genéricos. Dice usar parámetros de tipo:

1) Si desea imponer alguna relación en los diferentes tipos de argumentos de método, no puede hacerlo con comodines, debe usar parámetros de tipo.

Pero, ¿no es eso exactamente lo que está haciendo realmente el comodín con función auxiliar? ¿No está imponiendo una relación en diferentes tipos de argumentos de métodos con su configuración y obtención de valores desconocidos?

Mi pregunta es: si tiene que definir algo que requiere una relación en diferentes tipos de argumentos de método, entonces ¿por qué usar comodines en primer lugar y luego usar una función auxiliar para ello?

Parece una forma hacky de incorporar comodines.

Respuestas a la pregunta(3)

Su respuesta a la pregunta