у меня нет доступа к коду интерфейса; Я просто знаю, что есть метод с именем dequeue()
, который нужно переопределить в абстрактном классе, который его реализует.
Имя интерфейса — UrgencyQueue
, а абстрактный класс — BaseLinkedUrgencyList
.
ниже вся информация, которая у меня есть об интерфейсе, изображение UML и javadoc
Ниже моя попытка переопределить указанный метод:
public <Type> void dequeue(Consumer<Type> action) {
throw new UnsupportedOperationException("Method: not implemented.");
}
Объявление класса включает implements ''interface''
.
Выдается ошибка:
error: name clash: dequeue(Consumer<Type#1>) in BaseLinkedUrgencyQueue and dequeue(Consumer<Type#2>) in UrgencyQueue have the same erasure, yet neither overrides the other
public <Type> void dequeue(Consumer<Type> action) {
^
where Type#1,Type#2 are type-variables:
Type#1 extends Object declared in method <Type#1>dequeue(Consumer<Type#1>)
Type#2 extends Object declared in class BaseLinkedUrgencyQueue
Похоже, что dequeue
в интерфейсе должен использовать параметр универсального типа класса, а не метода.
@user16320675 user16320675 в этом была проблема, я не знал, что это так работает, большое спасибо. Не стесняйтесь опубликовать это как ответ, чтобы вы могли получить кредит.
на самом деле это комментарий @khelwood - я просто конкретизировал его
Похоже, что dequeue
, указанный в интерфейсе, должен использовать параметр универсального типа класса, а не метода.
Итак, если объявление класса выглядит примерно так:
public class BaseLinkedUrgencyList<Type> implements UrgencyQueue<Type>
тогда реализация метода должна быть такой:
@Override
public void dequeue(Consumer<Type> action)
Пожалуйста, включите соответствующие части определения интерфейса: строку объявления с любыми параметрами типа плюс сигнатуру метода
dequeue
. Также включите строку объявления реализующего класса. Я хотел бы посмотреть, как объявляются и используются все параметры типа в классе и методах, а также как они наследуются, если вообще наследуются.