[英]Behavior of method overloading with varargs
我有两个重载方法,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);
}
输出:
里面长的varargs 1
内部静态int varargs 1
编辑:我应该选择更好的方法名称。 有一个错字varargs,varagrs。 谢谢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 varargs 1
内部静态int varargs 1
这是一个错字
void varagrs(long... l){
^^
这就是为什么有一个带拼写检查的IDE很好(例如IntelliJ)
修复错误后,编译器选择(int...)
over (long...)
因为int
是long
(4.10.1)的子类型,所以第一种方法更具体(15.12.2.5) 。 注意,虽然int[]
不是long[]
(4.10.3)的子类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.