Столкновение имен при переопределении метода универсального класса
Я пытаюсь понять, что ошибка имени конфликтует со следующим кодом:
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
параметр от каждого метода. Я прочитал немного остирание типа, но мне все еще кажется, что оба метода должны иметь одно и то же стирание с универсальными шаблонами или без них, и, следовательно, должны быть корректными переопределениями в любом случае. (Обратите внимание, что я еще нигде не использовал универсальный параметр, поэтому я так удивлен.)
Я знаю, что раньше я добавлял универсальные типы в родительские классы, но получал только предупреждения о подклассах, а не об ошибках. Кто-нибудь может объяснить этот сценарий?