У меня есть абстрактный класс Monitor.java , который разделен на класс EmailMonitor.java .
Метод:
public abstract List<? extends MonitorAccount> performMonitor(List<? extends MonitorAccount> accounts)
определено в Monitor.java и должно быть переопределено в EmailMonitor.java .
В настоящее время у меня есть метод, переопределенный в EmailMonitor.java следующим образом:
@Override
public List<EmailAccount> performMonitor(List<EmailAccount> emailAccounts) {
//...unrelated logic
return emailAccounts;
}
Однако это приводит к ошибке времени компиляции:
Name clash: The method performMonitor(List<EmailAccount>) of type EmailMonitor has the same erasure as performMonitor(Lis<? extends MonitorAccount> emailAccounts) of type Monitor but does not override it
EmailAccount
- это подкласс MonitorAccount
, поэтому (по крайней мере, на мой взгляд) его переопределение имеет смысл. Видя, что компилятор недоволен моей логикой: как мне поступить правильно, сохраняя проверки времени компиляции, чтобы все вызовы EmailMonitor.performMonitor()
получали списки EmailAccount
, а не какой-то другой тип MonitorAccount
?