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

2024-01-06

看来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。

我可以使用任何模式或方法来获得我想要的行为吗?


访客模式正是您所需要的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

弥补 Java 中基于多态参数的运行时方法查找不足的模式? 的相关文章

随机推荐

  • 在 Swiper.js 最后一张幻灯片之后继续滚动

    我需要一些有关 Swiper js 的帮助 我有一个正在开发的网站https www paradev co uk ee live home alt https www paradev co uk ee live home alt 我想要发生
  • 结构参数的默认值

    假设我有以下结构 struct myStruct int x int y int z int w 我想在调用以下函数时将此结构初始化为默认值 如果有帮助 我正在寻找一个简单的零初始化 void myFunc myStruct param 0
  • 我怎样才能把日期和时间选择器放在android的对话框中

    我是 Android 新手 正在努力解决如何添加这两个date picker and time picker在一个单一的dialog box请指导我该怎么做我创建了一个dialog box并使用一个函数setview给它充气 但我得到了例外
  • CQ 工作流程,“Handler Advance”的目的?

    我正在 Adob e CQ 5 4 中使用一些自定义 WorkflowProcess 类 当我将工作流程步骤配置为工作流程模型的一部分时 有一个标题为 处理程序前进 检查您的处理程序是否将前进到下一步 的复选框 我的 Java 类实际上确实
  • Node.js + MySQL - 处理事务

    我正在使用express和node mysql驱动程序在node js上构建一个应用程序 当我需要进行一系列数据库插入 更新时 我的应用程序中有几种情况 我希望它们在一个事务中 这样如果第二个或第三个失败 以前的插入将完全回滚 目前 我这样
  • 如何旋转形状 (n,) 或 (n,1) 的 numpy 数组中的数字?

    假设我有一个 numpy 数组 gt gt gt a array 0 1 2 3 4 我想 旋转 它以获得 gt gt gt b array 4 0 1 2 3 什么是最好的方法 我一直在转换为双端队列并返回 见下文 但是有更好的方法吗 b
  • 使用 Angular ui-router 设置 URL 查询参数而不更改状态

    我应该如何使用 AngularJS 的 ui router 通过更改查询参数来更新地址栏 URL 以在刷新页面时保持状态 目前 我正在使用 state transitionTo search q updated search term 每当
  • MySQL单字段斜率(趋势)(最佳拟合线)

    我有一个名为 LOGENTRY 的简单表 其中包含名为 DATE 和 COST 的字段 例子 DATE COST MAY 1 2013 0 8 SEP 1 2013 0 4 NOV 1 2013 0 6 DEC 1 2013 0 2 我想找
  • HTTP/2 请求和以冒号开头的标头

    你好 亲爱的 SO 社区 我有一个问题折磨了我好几个月却没有解决办法 我正在尝试在 HTTP 2 端点上发出请求 该端点使用一些以冒号开头的标头 例子 method POST 我尝试过 python hyper requests php g
  • 如何在 AngularJS 网页中滚动后修复元素

    我最近用 AngularJs 做了一个网站 我还处于学习阶段 我希望在页面上的某个元素到达顶部后对其进行修复 我尝试过各种 Javascript 和 Jquery 函数 然而 他们似乎并没有工作 我也尝试使用 Angular UI 的 ui
  • 如何在 Linux 上的 Bash 中一次删除多个文件?

    我在 Linux 服务器上有以下文件列表 abc log 2012 03 14 abc log 2012 03 27 abc log 2012 03 28 abc log 2012 03 29 abc log 2012 03 30 abc
  • onsubmit 方法与提交事件监听器

    我一直在为一门课程做一个邮件程序 我遇到了与通过 return false 阻止表单提交有关的行为 我不明白 情况 1 未正确阻止表单提交 重新加载 DOM 并出现 200 错误 document querySelector compose
  • IDEA 中的 Spring 支持与 Lombok:是否支持“导航到自动装配依赖项”?

    Lombok 支持生成构造函数 Inject注释 RequiredArgsConstructor onConstructor Inject 所以 而不是 Service public class FooService private fin
  • Node.js 支持“let”语句吗?

    Node js 是否支持 let 语句 例如MDN 上有描述吗 https developer mozilla org en JavaScript Reference Statements let var x 8 y 12 let x 5
  • opencv 使用 waitKey() 函数处理箭头键

    我想处理箭头键 但是当我打印出 waitKey 函数的输入值时 它是 0 我不知道为什么 我尝试从 int 更改为 char 但它不起作用 我怎么解决这个问题 int pos 100 imshow image image onChange
  • 页面加载时的 jQuery .fadeIn() ?

    我正在尝试设置一些代码 以便我有一个首先隐藏但在页面加载后淡入的代码 我有以下 HTML 代码 div class hidden p This is some text p div 然后我还有这个 CSS 代码 它隐藏了 div div h
  • 如何从war文件中获取java源代码?

    我没有最新的源代码 但在服务器上部署了 war 最新 文件 请建议最好的方法1 从war ear获取源代码2 将可用源代码与 war ear 中存在但可用源代码中缺失的代码进行比较并合并 更新 我正在使用 ECLIPSE IDE 提前致谢
  • 如何在 Mac 上与图层支持的视图交互

    我正在设计一个包含多个标签和文本字段的用户界面 我想像这样设计用户界面 为我的内容视图设置背景图案NSWindow 在左上角背景添加自定义图标 我通过将内容视图设置为层支持视图如中所述Apple 的文档NSView http develop
  • 使用 Scipy 进行图像腐蚀和膨胀

    我正在尝试使用 scipy 来做erosion http docs scipy org doc scipy reference generated scipy ndimage morphology binary erosion html a
  • 弥补 Java 中基于多态参数的运行时方法查找不足的模式?

    看来Java无法根据参数的运行时类型选择最合适的方法实现 如文档所示here http www rizzoweb com java polymorphismAndOverloading html 回顾一下这个例子 class Supercl