【发布时间】:2010-12-11 17:23:48
【问题描述】:
所以我之前问过这个问题,但我在代码中犯了一个大多数人都知道的错误,而不是问题本身。
无论如何,我正在尝试覆盖类中的接口方法。但是,我希望覆盖方法中的参数类型是覆盖方法中定义的参数类型的子类。
界面是:
public interface Observer {
public void update(ComponentUpdateEvent updateEvent) throws Exception;
}
而重写此方法的类是:
public class ConsoleDrawer extends Drawer {
//...
@Override
public void update(ConsoleUpdateEvent updateEvent) throws Exception {
if (this.componentType != updateEvent.getComponentType()) {
throw new Exception("ComponentType Mismatch.");
}
else {
messages = updateEvent.getComponentState();
}
}
//...
}
ConsoleUpdateEvent 是 ComponentUpdateEvent 的子类。
现在,我可以让 ConsoleDrawer 中的 update() 方法将 ComponentUpdateEvent 作为参数,然后将其转换为 ConsoleUpdateEvent,但如果可能的话,我正在寻找更优雅的解决方案。任何帮助,将不胜感激。谢谢。
【问题讨论】:
-
我不相信这是可能的,因为它违背了接口的原则(即实现接口的类将完全匹配接口指定的所有方法签名)。但是,我会看这个问题,因为我很想看看其他人是否会证明我错了。
标签: java generics parameters overriding subclass