【发布时间】:2010-09-19 08:56:37
【问题描述】:
我有一个抽象类 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 的列表而不是其他类型的@987654328 @?
【问题讨论】:
标签: java generics inheritance