【发布时间】:2015-04-04 10:22:57
【问题描述】:
我刚刚赶上 java 1.5,(是的,我知道它为时过早;))。在尝试一些关于 varargs 的练习时,我发现了一些奇怪的东西,如下所示。代码编译良好,并且仅当我提供至少一个参数时才调用 varargs 方法。这不应该是编译器错误,一个方法和带有可变参数的重载方法。或者您可能会想到任何特定的用例,这种情况将 有用
public class VarargsExample {
public static void main(String args[]) {
test1();
}
public static void test1(int... x) {
System.out.println("AssertionExample.test1(ARRAY METHOD)");
}
public static void test1() {
System.out.println("AssertionExample.test1(PARAM LESS)");
}
}
PS:尝试在 SO 中搜索此内容,找不到类似的内容。如果已经有的话,请原谅我:)
总结,感谢大家的快速回复。似乎是正常的方法是首选。当单个参数方法存在时也是如此,如下所示
public class VarargsExample{
public static void main( String args[] ){
test1();
test1(2);
}
public static void test1(int... x){
System.out.println("AssertionExample.test1(ARRAY METHOD)");
}
public static void test1(int x){
System.out.println("AssertionExample.test1(single param METHOD)");
}
public static void test1(){
System.out.println("AssertionExample.test1(PARAM LESS)");
}
}
【问题讨论】:
-
@Pshemo 感谢您格式化代码。
-
是什么让你认为这应该失败?
-
@christopher 我从来没有说过它会失败。
-
没问题。顺便说一句,基于缺少参数
test1()比test1(int... x)更精确,所以我不认为编译器不应该在可变参数上使用它的任何原因...... -
@Ravisha:编译器“首选”非可变参数方法而不是可变参数方法。只要将第一个 int 参数添加到方法调用中,就会调用 vararg 版本。如果您不知道要使用的参数的确切数量,可变参数方法会非常有用。示例:Arrays.asList