CreateTime--2017年9月15日14:42:40
Author:Marydon
java如何实现不固定个数传参(定义实参个数可变的方法)
参考链接:原文链接
传统方法:为这个方法定义一个数组型的参数,将不确定的参数放到数组中,把这个数组作为一个实参传递过去
举例:
// 定义带有数组型参数的方法
int getSum(int[] params) { }
// 调用
getSum(1,2,3);
方法:借助Varargs机制
J2SE 1.5提供了“Varargs”机制。借助这一机制,可以定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参;
Varargs:"variable number of arguments"
举例:
/**
* 求和
* @description
* 定义实参个数可变
* @param params
* >=0个int类型实参
* @return
*/
static int getSum(int... params) {
// 和
int sum = 0;
for (int i : params) {
sum += i;
}
return sum;
} // 调用
int sum = Test.getSum(1,2,3);
System.out.println(sum); //
注意事项:
1.java不支持泛型数组,当数组元素类型不确定时,可以使用Object来定义该数组的数据类型;
2.不能确定的参数个数的方法在定义时,该形参必须放在方法的最后一个参数;
否则,编译报错:The variable argument type int of the method getSum must be the last parameter
3.不能再为这个类定义一个和转化后的方法签名一致的方法;
否则,编译报错:Duplicate method getSum(int[]) in type Test
原因:在class文件编译时实际上将匹配不确定个实参的形参,转化为数组形参,即
static int getSum(int[] params) {
// 和
int sum = 0;
for (int i : params) {
sum += i;
}
return sum;
}
4.传0个实参时,传递过去的是一个空数组,而不是null;
5. 传统方式与这种方式的区别在于:这种方式传参时不必将参数先封装到一个数组里面。