【发布时间】:2013-04-27 12:25:33
【问题描述】:
我有两个使用 varargs int 和 long 的重载方法。当我运行一个通过整数的测试时,它似乎更喜欢 varargs long 方法。然而,如果我将方法设为静态并使用整数运行,它似乎更喜欢 varargs int 方法。这是怎么回事?
void varargs(int... i){
System.out.println("Inside int varargs");
for(int x : i)
System.out.println(x);
}
void varagrs(long... l){
System.out.println("Inside long varargs");
for(long x : l)
System.out.println(x);
}
static void staticvarargs(int...i)
{
System.out.println("Inside static int varargs");
for(int x : i)
System.out.println(x);
}
static void staticvarargs(long...l)
{
System.out.println("Inside static long varargs");
for(long x : l)
System.out.println(x);
}
public static void main(String args[]){
VarArgs va = new VarArgs();
va.varagrs(1);
staticvarargs(1);
}
输出:
在长可变参数内 1
内部静态 int 可变参数 1
编辑:我应该选择更好的方法名称。有一个错字可变参数,可变参数。感谢 zhong.j.yu 指出。
更正的代码和预期行为:
void varargs(int... i){
System.out.println("Inside int varargs");
for(int x : i)
System.out.println(x);
}
void varargs(long... l){
System.out.println("Inside long varargs");
for(long x : l)
System.out.println(x);
}
static void staticvarargs(int...i)
{
System.out.println("Inside static int varargs");
for(int x : i)
System.out.println(x);
}
static void staticvarargs(long...l)
{
System.out.println("Inside static long varargs");
for(long x : l)
System.out.println(x);
}
public static void main(String args[]){
VarArgs va = new VarArgs();
va.varargs(1);
staticvarargs(1);
}
输出:
内部 int 可变参数 1
内部静态 int 可变参数 1
【问题讨论】:
-
虽然我无法解释这种行为,但这可能是为了引起混淆,促使 Oracle 明确建议 vararg 方法没有重载in the Javadocs。
-
@Evgeny 这是一个不同的问题,不是吗?
-
是的添加它是为了完整性
标签: java overloading variadic-functions