可变参数简介
可变参数 是Java 1.5版本新增的功能,又被称为Varargs机制,Varargs是variable number of arguments的简称,意思为参数个数可变函数,其展现形式为 参数和 参数类型 之间加上 ...,也就是在 参数类型 的后面加三个点。参数有实参和形参之分,方法上的参数是形参,可变参数是针对形参的。
使用场景一
从前台传递参数到后台,比如传递一个字符串数组;
原始的写法:
/**
* 用数组接收参数
* @param str
* @return
*
*/
@PostMapping("/test/array1")
public Object testArray1(@RequestParam(value="str")String[] str){
return str;
}
用可变参数可以这样写:
/**
* 用可变参数接收参数
* @param str
* @return
*
*/
@PostMapping("/test/array2")
public Object testArray2(@RequestParam(value="str")String... str){
return str;
}
使用场景二
后台方法间的调用,如果参数类型一样,参数个数不同,则可以使用可变参数,这样就省去了写多个类似的方法;
/**
* 可变参数测试
* @param argo
*
*/
public static void main(String[] argo){
sum(1);
sum(1,2);
sum(1,2,3);
sum(3,2,4);
}
/**
* 可变参数使用
* @param number
*
*/
public static void sum(int... number){
int count = 0;
for(int n : number){
count+=n;
}
System.out.println(count);
}
输出结果为:
1
3
6
9
注意事项
如果有多个参数时,可变参数一定要放在最后面,特别是相同参数类型的参数;
/**
* 可变参数测试
* @param argo
*
*/
public static void main(String[] argo){
testStr("ming","zhang");
testStr("ming","zhang","足球");
testStr("ming","zhang","足球","跑步");
//也可以像上面的例子一样传递数组
String[] aa = new String[3];
aa[0] = "足球";
aa[1] = "跑步";
aa[2] = "音乐";
testStr("ming","zhang",aa);
}
/**
* 测试多个相同类型的参数
* @param lastName
* @param firstName
* @param hobby
*
*/
public static void testStr(String lastName,String firstName,String... hobby){
System.out.println("firstName:" + firstName + ", lastName:" + ",hobby:" + StringUtils.join(hobby));
}
输出结果为:
firstName:zhang, lastName:,hobby:
firstName:zhang, lastName:,hobby:足球
firstName:zhang, lastName:,hobby:足球,跑步
firstName:zhang, lastName:,hobby:足球,跑步,音乐
在一个类中,相同的可变参数不要重复出现,以免让编译器傻傻分不清,像下面这种情况,编译器就直接报错了。
![](https://img.haomeiwen.com/i3816895/851cfc62edc983da.png)
总结
可变参数需要用在合适的场合,但是也不能滥用,如果定义的方法自己都含含糊糊,界限不够清晰,编译器也会分不清。使用可变参数,最初还是因为,从前台往后台传递字符串数组总是报错,这才使用了可变参数。可变参数是一种机制,也是一个小小的技巧,技巧用对了,才能发挥作用。
![](https://img.haomeiwen.com/i3816895/f89de0a3e88690ac.png)
网友评论