原创文章,转载请注明。
我们看如下一个方法的声明。
public static void tst( Object... initargs){
System.out.println(initargs.length);
System.out.println(initargs[0]);
}
参数中那三个小数点代表什么意思呢?这代表方法自动重载。也就是我们如下的代码都是合法的。
tst();//0,报异常
tst(1);//1,1
tst(1,2);//2,1
tst(1,2,3);//3,1
其实现原理为自动地将initargs转换为一个Object[ ]数组。
这就问题来了,如果我们的参数本身就是一个数组,怎么办?如下代码:
String[] strArr = new String[2];
strArr[0]="a";
strArr[1]="b";
tst(strArr);//2,a
可见,如果传入的是数组,则Java默认就不再去转换Object数组了,也就会造成参数错误。
解决办法就是,再初始化一个Object[]数组,传入函数,如下代码所示:
String[] strArr = new String[2];
strArr[0]="a";
strArr[1]="b";
Object[] args = new Object[1];
args[0]=strArr;
tst(args);//1,{“a”,"b"}