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