![]() |
1
19
这篇文章记录了voo的答案,并给出了延迟绑定的详细信息/替代方案。 一般的jvm只使用 单次调度 method tables (类似于C++的虚拟表)。你可以在 the HotSpot Wiki . 多次调度 对于您的参数,请查看
如果你想的话 坚持Java ,你可以
价值调度:
|
![]() |
2
12
你想要的是两倍或更一般的 multiple dispatch 可能java没有它的主要原因,是因为它的性能受到了影响,因为重载解析必须在运行时而不是编译时完成。通常的方法是 visitor pattern -很难看,但就是这样。 |
![]() |
3
3
变量 传递给函数。它不使用实际实例的类型。 |
![]() |
4
3
旧的问题,但没有答案,在Java中提供了一个具体的解决方案,以干净的方式解决这个问题。
正如在优秀的@DaveFar答案中所说,Java只支持单一的分派方法。
为了以干净的方式解决问题并使用双重分派,我们必须为被操纵的数据引入抽象。
这里有一个天真的访客方法来说明这个问题:
现在,问题是:访问的类如何调用
但不可能!访问的类是内置的类:
因此,要实现双重分派,我们必须能够修改要在第二个分派中作为参数传递的类。
对象foo
整合器
这是
课堂参观
输出:
如前所述,我们没有选择操作双重调度。
我们确实可以引入一个抽象泛型类,它保存用户值并提供一个访问器来:
以及
实际上,如果真的需要,我们可以进一步简化
声明此子类:
在哪里?
|
![]() |
5
1
|
![]() |
6
1
|
|
Deconimus · C++模板方法重载和多态性类访问 7 年前 |
![]() |
Vincent · 一种类型特征,标识哪个类提供重载解析选择的函数 7 年前 |
![]() |
Lingxi · C中的默认参数vs重载++ 7 年前 |
![]() |
Slime recipe · 多目标框架导致CS1503 7 年前 |
![]() |
Dick Lucas Carl · 函数重载的替代方法 7 年前 |
![]() |
Ali · Typescript rest参数具有两种可能的数组类型 7 年前 |