У меня есть абстрактный класс 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
?