gpt4 book ai didi

Java 重载 : reference to call ambiguous

转载 作者:搜寻专家 更新时间:2023-10-30 21:31:42 24 4
gpt4 key购买 nike

考虑以下示例代码:

public class TestClass {

public void doSth(String str, String l, Object... objects) {
System.out.println("A");
}

public void doSth(String str, Object... objects) {
System.out.println("B");
}

}

当我现在调用 new TestClass().doSth("foo", "bar") 时,我得到了预期的结果 A。但是,如果我通过将参数 l 更改为基本类型来更改第一个方法的方法签名:

public class TestClass {

public void doSth(String str, long l, Object... objects) {
System.out.println("A");
}

public void doSth(String str, Object... objects) {
System.out.println("B");
}

}

调用 new TestClass().doSth("foo", 2L) 将产生一个 reference to call ambiguous 编译时错误。

我考虑了一段时间,也咨询了this stackoverflow question ,但我无法理解为什么会这样。在我看来,doSth("foo", 2L) 更特定于 doSth(String string, long l, Object... obj) 签名,应该允许编译器也会得出这个结论。

最佳答案

在这种情况下,自动装箱会让您感到悲伤。具有讽刺意味的是,在那之前你是对的 - “长”版本很容易被选中。

基本上,编译器知道它可以从您的值创建一个 Long,当然,它是一个对象。所以它仍然很困惑,因为可以使用长版本或长版本。这个比那个好吗?也许吧,但这是一条很好的线。

关于Java 重载 : reference to call ambiguous,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37333102/

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