文章作者:Tyan
1. 可变参数Varargs介绍
在JDK 1.5之前,要想在方法中使用可变参数,则必须通过数组(或其它集合)来实现,在这种情况下你需要将变量显式的定义在数组中,在使用时要从数组中取出变量。另一种方法是进行函数重载。而在JDK 1.5中,引入了可变参数(Varargs),全称为variable number of arguments,常被称为variable arguments。可变参数仍然是通过数组来实现的,只不过编译器帮你隐式的实现了这个过程,此外,它还能兼容以前的API。
可变参数,也就是说可以在参数列表中使用个数不确定的参数,最经典的例子就是Java中的main方法,参数的个数没有办法确定,此时就可以使用可变参数来处理方法中的参数。使用时可以按照数组的使用方式来用。
下面是可变参数定义的例子:
public static String format(String pattern, Object... arguments) {
...
for(Object temp : arguments) {
//业务逻辑
}
...
}
2. 使用可变参数的一个例子
public class IntSum {
public int sum(int... intArray) {
int sumInt = 0 ;
for (int temp : intArray) {
sumInt += temp;
}
return sumInt;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
IntSum test = new IntSum();
System.out.println(test.sum(1));
System.out.println(test.sum(1, 2));
System.out.println(test.sum(1, 2, 3));
}
}
输出结果为:1,3,6。
public class IntSum {
public int sum(int a) {
return 0;
}
public int sum(int... intArray) {
int sumInt = 0 ;
for (int temp : intArray) {
sumInt += temp;
}
return sumInt;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
IntSum test = new IntSum();
System.out.println(test.sum(1));
System.out.println(test.sum(1, 2));
System.out.println(test.sum(1, 2, 3));
}
}
输出结果为:0,3,6
3. 使用可变参数的注意事项
- 可变参数只有当参数数目不确定时才会使用。
- 当参数中需要T[]作为参数时,可以考虑使用可变参数。
- 可变参数只能用在参数列表中的最后一个位置,且方法中只能有一个可变参数。
- 在方法调用时,如果能够和固定参数的方法匹配,也能够与可变长参数的方法匹配,则优先选择固定参数的方法。
- 由于使用可变参数需要隐式的创建匿名数组并初始化,因此会影响性能,在性能优先的情况下慎用。
- 尽量避免重载含有可变参数的方法。
- 可变参数输入时不能传
null
值。 - Arrays.asList()方法支持可变参数。
参考资料:
1、Effective Java 2.0