Choque de nombres al anular el método de la clase genérica

Estoy tratando de entender el error de choque de nombres que obtengo con el siguiente código:

import java.util.*;
import javax.swing.*;

class Foo<R extends Number> {
    public void doSomething(Number n, Map<String, JComponent> comps) {
    }
}

class Bar extends Foo {
    public void doSomething(Number n, Map<String, JComponent> comps) {
    }
}

Mensaje de error:

error: choque de nombres:doSomething(Number,Map<String,JComponent>) enBar ydoSomething(Number,Map<String,JComponent>) enFoo tienen el mismo borrado, pero ninguno anula al otro

Sé que puedo solucionarlo eliminando el tipo genérico deFooo cambiando elBar declaración aclass Bar extends Foo<Integer>; lo que quiero saber es por qué ocurre este error en el caso específico, pero desaparece si elimino elcomps parámetro de cada método. He leído un poco sobreborrado tipo, pero todavía me parece que ambos métodos deberían tener la misma eliminación con o sin genéricos, y por lo tanto, ser una anulación válida en cualquier caso. (Tenga en cuenta que aún no he usado el parámetro genérico en ninguna parte, por eso estoy tan sorprendido).

Sé que he agregado tipos genéricos a las clases primarias antes, pero solo recibí advertencias sobre las subclases, no errores. ¿Alguien puede explicar este escenario?

Respuestas a la pregunta(1)

Su respuesta a la pregunta