看来Java无法根据参数的运行时类型选择最合适的方法实现,如文档所示here http://www.rizzoweb.com/java/polymorphismAndOverloading.html。回顾一下这个例子:
class Superclass {}
class Subclass extends Superclass {}
class Test {
public void aMethod(Superclass s) {...}
public void aMethod(Subclass s) {...}
}
执行Test类的哪个方法是根据引用的类型而不是实例的类型来确定的。再次,基于链接的示例:
Test aTest = new Test();
Superclass aSuper = new Subclass();
test.aMethod(aSuper);
It is aMethod(Superclass s)
执行,而不是aMethod(Subclass s)
.
我试图创建侦听器模式的变体,其中侦听器通过接口“插入”,并且侦听器具有为接口的子类定义的方法。
作为一个简单的例子来说明我的意思,假设我正在构建一个可以插入功能的闹钟。
我想到的上述实现看起来像一个接口Event
,有一个子类WakeUpEvent
,和一个接口EventListener
要求实施handle(Event evt)
.
我希望创建一个实现无操作的类handle(Event evt)
具有特定的handle(WakeUpEvent evt)
如果侦听器想要处理该类型的事件。
当然,这种方法不会按原样工作 - 明显的解决方案是运行时instanceof
检查 - yuk。
我可以使用任何模式或方法来获得我想要的行为吗?