为什么这个声明在编译时不被认为是模棱两可的?
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...)
为什么这个声明在编译时不被认为是模棱两可的?
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...)
我认为背后的 var-args 声明实际上是由编译器转换为数组的。因此以 var-args 作为参数的方法实际上如下所示:
void f(int[] a) {
System.out.println("int...");
}
void f(int... a) {
System.out.println("int...");
}
上述方法可以接受一个或多个值,并且该方法只包含一个参数,即
void f(int a) {
System.out.println("int");
} 也可以接受一个值。