2

为什么这个声明在编译时不被认为是模棱两可的?

void f(int a) {
    System.out.println("int");
}
void f(int... a) {
    System.out.println("int...");
}

例如:

f(2);     // to one parameter both method should match (f(int) runs)
f(2,2);   // f(int...)
4

2 回答 2

3

我认为背后的 var-args 声明实际上是由编译器转换为数组的。因此以 var-args 作为参数的方法实际上如下所示:

void f(int[] a) {
    System.out.println("int...");
}
于 2013-02-11T09:20:49.417 回答
0
void f(int... a) {
System.out.println("int...");

}

上述方法可以接受一个或多个值,并且该方法只包含一个参数,即

void f(int a) {
System.out.println("int");

} 也可以接受一个值。

于 2013-02-11T09:35:47.800 回答