java - 用于弥补 Java 中基于多态参数的运行时方法查找不足的模式?

标签 java polymorphism listener

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/

相关文章:

c++ - 返回与定义的多态函数不同的类型

android - 无法解析符号 OnEditorActionListener

java.security.InvalidKeyException : Wrong key size

java - Hibernate Envers find 方法期间出现 nullpointerException

ruby-on-rails-3 - HABTM 多态关系

C++:为什么结构\类需要一个虚拟方法才能成为多态?

amazon-web-services - 如何为 AWS::ElasticLoadBalancingV2::Listener 设置多个证书

android - Firestore 的 hasPendingWrites() 在删除文档时返回 false

java - Android 从字节数组中保存 gif

java - 在 Elasticsearch 上创建自定义 CRUD