gpt4 book ai didi

java - 为什么不能在执行时实现重载呢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:34 24 4
gpt4 key购买 nike

请看下面的例子:

interface I {}

class A implements I {}

class B implements I {}

class Foo{
void f(A a) {}
void f(B b) {}
static public void main(String[]args ) {
I[] elements = new I[] {new A(), new B(), new B(), new A()};
Foo o = new Foo();
for (I element:elements)
o.f(element);//won't compile
}
}

为什么重载方法不支持向上转型?

如果在运行时实现重载,它将提供更多的灵 active 。例如,访问者模式会更简单。是否有任何技术原因阻止 Java 执行此操作?

最佳答案

重载决议涉及一些重要的规则来确定哪个重载最合适,并且很难在运行时有效地执行这些操作。相比之下,覆盖解析更容易——在困难的情况下,您只需查找对象类的 foo 函数,而在简单的情况下(例如,当只有一个实现时,或者只有一个在此代码路径中实现),您可以将虚拟方法转换为静态编译的、非虚拟的、非动态调度的调用(如果您是基于代码路径执行此操作,则必须快速检查以验证该对象实际上是您期望的对象)。

事实证明,Java 1.4 及更低版本没有运行时覆盖解决方案是一件好事,因为这会使泛型更难改造。泛型在覆盖解析中发挥作用,但由于删除,此信息在运行时不可用。

关于java - 为什么不能在执行时实现重载呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10713379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com