Столкновение имен при переопределении метода универсального класса

Я пытаюсь понять, что ошибка имени конфликтует со следующим кодом:

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) {
    }
}

Сообщение об ошибке:

ошибка: имя конфликтует:doSomething(Number,Map<String,JComponent>) вBar а такжеdoSomething(Number,Map<String,JComponent>) вFoo иметь то же самое стирание, но ни один не отменяет другой

Я знаю, что могу это исправить, удалив общий тип изFooили путем измененияBar декларацияclass Bar extends Foo<Integer>; я хочу знать, почему эта ошибка возникает в конкретном случае, но исчезает, если я удаляюcomps параметр от каждого метода. Я прочитал немного остирание типа, но мне все еще кажется, что оба метода должны иметь одно и то же стирание с универсальными шаблонами или без них, и, следовательно, должны быть корректными переопределениями в любом случае. (Обратите внимание, что я еще нигде не использовал универсальный параметр, поэтому я так удивлен.)

Я знаю, что раньше я добавлял универсальные типы в родительские классы, но получал только предупреждения о подклассах, а не об ошибках. Кто-нибудь может объяснить этот сценарий?

Ответы на вопрос(1)

Ваш ответ на вопрос