Можно ли вручную переопределить унаследованные методы? - PullRequest
1 голос
/ 02 сентября 2011

Это очень несовершенный заголовок ...

public class A extends AbstractList
{
   public boolean addAll(int index, Collection<E> what){}
}

, но Eclipse выдает ошибку компиляции

Name clash: The method addAll(int, Collection<E>) of type DynamicArray<E> has the same
erasure as addAll(int, Collection<? extends E>) of type AbstractList<E> but does not 
override it

Я понимаю, в чем проблема с удалением, но я неЯ не понимаю, почему addAll(int, Collection<E>) не переопределяет унаследованный метод, с которым он конфликтует (Если бы оба были определены в одном и том же классе, я мог бы это увидеть, но проблема в следующем: «Когда метод имеет такое же стирание, что и унаследованный метод, мыпереопределить унаследованный метод. Но этот метод имеет то же самое стирание, поэтому он не будет работать ").

Есть ли способ заставить компилятор перезаписать AbstractList.addAll(int, Collection<? extends E>) с помощью DynamicList.addAll(int, Collection<E>)?

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

В частности, оригинал addAll(int, Collection<? extends E>) гласит, что второй парм может быть любой коллекцией элементов, которые могут расширять E, в то время как ваша версия addAll(int, Collection<E>) требует, чтобы элементы были точно E, и они не могут расширять E.

1 голос
/ 02 сентября 2011

Вам нужно дать точно такую ​​же сигнатуру, как и метод, который нужно переопределить:

 public boolean addAll(int index, Collection<? extends E> what)

Есть ли способ заставить компилятор перезаписать AbstractList.addAll(int, Collection<? extends E>) с DynamicList.addAll(int, Collection<E>)?

Если вы думаете о перегрузке: Нет. Два метода не могут быть различены из-за стирания. Так что может быть только один.

Если вы думаете о переопределении: ну, если вы укажете другую подпись, это не будет переопределением, не так ли? Вы также не можете сузить коллекцию до ArrayList в подписи, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...