java - Var arg 方法导致客户端代码出错

标签 java variadic-functions

<分区>

我试图找出可变参数的来龙去脉并编写了以下代码

public class VarArgTest {

/**
 * @param args
 */
public static void main(String[] args) {
    VarArgTest v = new VarArgTest();
    //Code 1
    System.out.println("haha");
}

public void m1(Integer a, Integer... ints) {
    System.out.println("1");
}

public void m1(Integer... ints) {
    System.out.println("2");
}
}

现在,如果我将代码 1 替换为

v.m1(new Integer(1), new Integer(2));

我收到以下消息

The method m1(Integer, Integer[]) is ambiguous for the type VarArgTest

我的问题是,为什么在客户端代码中抛出错误?在定义两个 m1 方法时,它不应该被编译器捕获吗?

最佳答案

这不是重载错误,因为仍然明确调用了这两个方法。

v.m1(new Integer[] {1, 2})

v.m1(1, new Integer[] {2})

两者都可以正常工作。只有当编译器必须弄清楚如何将调用中的参数转换为数组时,它才会变得模棱两可。

关于java - Var arg 方法导致客户端代码出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15963558/

相关文章:

java - 使用 Java 从 Excel 电子表格中收集列名称

java - 在 debian 8 上使用 chromedriver 启动 Selenium 后出错

variadic-functions - 如何在 Zig 中初始化可变参数函数参数?

java - 访问在 Swift 中使用 J2objc 翻译的枚举

java - java中的方程中的括号使用正确吗?

java - 类必须声明为抽象或实现抽象方法 : Intellij error?

types - 在 Julia 中键入 kwargs

C++将可变数量的位置从给定数组传递给函数

c - printf 中 "%c"的默认参数提升和相关性

c - 如何正确使用 va_list?