【发布时间】:2010-08-29 18:53:59
【问题描述】:
我有事件观察器,它们都观察相同的事件,所以我有一个抽象超类来观察该事件,然后子类覆盖/实现特定功能。
这样做的问题是它不会观察事件,除非我将事件观察器方法放在子类中(这违背了我的设计目的)。
我当然可以这样做,但我想编写尽可能少的代码。
应该这样工作吗(我做错了什么)?
如果它不应该以这种方式工作,那么我可以为一件事编写一个生产者,然后编写一个拦截器。我认为我的第一种方法更简单,更容易被其他开发人员正确使用。
示例代码:
超类:
public abstract class AbstractFileWriter
{
public void onReady(@Observes ReadyEvent readyEvent)
{
try
{
handleReady(readyEvent, ...);
}
}
protected abstract handleReady(ReadyEvent readyEvent, otherParameters go here);
}
子类
public class XmlWriter extends AbstractFileWriter
{
protected handleReady( ... )
{ ... }
}
如果我这样写,handleReady 永远不会被调用(而且 onReady 也不会被调用);但是,如果我使用子类中的观察者方法编写它,它会按预期工作。我想以这种方式编写它,因为我必须编写的代码少得多,抽象的少一点应该更容易理解。
沃尔特
【问题讨论】:
-
你是说JVM调用的是超类的方法而不是子类的覆盖方法?