Java 似乎无法根据参数的运行时类型选择最合适的方法实现,如文档所述here .重述示例:
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);
执行的是aMethod(Superclass s)
,而不是aMethod(Subclass s)
。
我试图创建监听器模式的变体,其中监听器通过接口(interface)“插入”,并且监听器具有为接口(interface)的子类定义的方法。
举个简单的例子来说明我的意思,假设我正在构建一个可以插入功能的闹钟。
我想到的上面的实现看起来像一个接口(interface) Event
,有一个子类 WakeUpEvent
,一个接口(interface) EventListener
需要handle(Event evt)
的实现。
我希望创建一个实现无操作 handle(Event evt)
的类,如果监听器想要处理该类型,则具有特定的 handle(WakeUpEvent evt)
事件。
当然,这种方法不会按原样工作 - 显而易见的解决方案是运行时 instanceof
检查 - yuk。
是否有任何模式或方法可用于获得我想要的行为?
最佳答案
访问者模式是你所需要的
关于java - 用于弥补 Java 中基于多态参数的运行时方法查找不足的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4086523/