Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。
可变参数的特点:
(1)、只能出现在参数列表的最后;
(2)、...位于变量类型和变量名之间,前后有无空格都可以;
(3)、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。
public static void dealArray(int... intArray) {
for(int i: intArray) {
System.out.println(i + " ");
}
}
public static void main(String[] args) {
dealArray();
dealArray(1);
dealArray(1,2);
int[] intArray = {1,2,3};
dealArray(intArray);
}
通过main方法里的调用,可以看出来这个可变参数既可以是没有参数(空参数),也可以是不定长的。看到这里估计都能明白,这个不定长的参数其实和数组参数挺像的。事实上,也确实是这么回事儿。编译器会在悄悄地把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。
dealArray(); //dealArray(int[] intArray{});
dealArray(1); //dealArray(int[] intArray{1});
dealArray(1, 2, 3); //dealArray(int[] intArray{1, 2, 3});
可变参数和固定参数方法的优先级:
public static void a(int i, int j) {
System.out.println("此方法是固定参数。");
}
public static void a(int ... intArray) {
System.out.println("此方法是可变参数。");
}
输出:
public static void main(String[] args) {
a(1,2);
}
结果:
此方法是固定参数。
能匹配定长的方法,那么优先匹配该方法。含有不定参数的那个重载方法是最后被选中的。
在项目中看到别人使用,所以去网上查了相关资料。
文章信息摘自网络,仅供参考。
项目中使用如下:
//把方法的参数封装成键值对的MAP类型。
public static Map getMaps(Object ... s){
Map map = new HashMap();
for(int i=0;i+1<s.length;i+=2){
map.put(s[i], s[i+1]);
}
return map;
}
方法的调用:
Map map = ProfileOptionValueLocalServiceUtil.getMaps("companyId",line.getCompanyId()
,"departmentId",line.getDepartmentId()
,"budgetYear",order.getBudgetYear()
,"budgetType",order.getBudgetTypeLookupCode(),"companyNature",order.getCompanyNatureLookupCode()
,"profileOptionValue","N");