Java语法糖之个数可变的形参的实现
1.背景
从JDK1.5开始,Java支持个数可变的形参,类似:
publicclassParamDemo{
publicstaticvoidmain(String[]args){
Stringbasketball="篮球";
Stringfootball="足球";
showSports(basketball,football);
}
/**
*使用个数可变形参的方法
*/
publicstaticvoidshowSports(String...sports){
for(Stringsport:sports){
System.out.println(sport);
}
}
}
2.优点
其实个数可变形参的本质就是一位数组,但是如果上面的例子采用一位数组的话,写起来要更加麻烦点。
publicclassParamDemo{
publicstaticvoidmain(String[]args){
Stringbasketball="篮球";
Stringfootball="足球";
showSports(basketball,football);
showSportsByArray(newString[]{basketball,football});
}
/**
*使用个数可变形参的方法
*/
publicstaticvoidshowSports(String...sports){
for(Stringsport:sports){
System.out.println(sport);
}
}
/**
*使用1维数组作为形参
*/
publicstaticvoidshowSportsByArray(String[]sports){
for(Stringsport:sports){
System.out.println(sport);
}
}
}
3.注意事项
3.1位置只能在方法的最后
由于个数可变的形参数量不确定,所以只能放到形参列表的最后。而数组形式的参数是可以放到形参列表任意位置的。
3.2个数可变形参本质是数组,所以不能算重载
看下面的例子:
publicclassParamDemo{
publicstaticvoidmain(String[]args){
Stringbasketball="篮球";
Stringfootball="足球";
showSports(basketball,football);
showSportsByArray(newString[]{basketball,football});
}
/**
*使用个数可变形参的方法
*/
publicstaticvoidshowSports(String...sports){
for(Stringsport:sports){
System.out.println(sport);
}
}
/**
*使用1维数组作为形参
*/
publicstaticvoidshowSports(String[]sports){
for(Stringsport:sports){
System.out.println(sport);
}
}
}
编译就报错了,如下,说明啥?String...这样的形参其实还是编译为String[]运作的,所以不算重载。
DuplicatemethodshowSports(String[])intypeParamDemoParamDemo.java
示例
/**
*可变个数形参的方法:
*javaSE5.0中提供了Varargs(variablenumberofarguments)机制,
*允许直接定义能和多个实参相匹配的形参,从而,可以用一种更简单的方式,
*来传递个数可变的形参.
*
*2.具体使用:
*2.1可变个数形参的格式:数据类型...变量名
*2.2当调用可变个数形参的方法时,传入的参数个数可以是0个,1个,2个,。。。
*2.3可变个数形参的方法与本类中,形参不同的方法之间构成重载
*2.4可变个数形参的方法与本类中的方法名相同,形参类型也相同的数组之间不过程重载。换句话说,二者不能共存。
*2.5可变方法个数形参在方法的形参中,必须声明在末尾。
*2.6可变个数形参在方法的形参中,最多只能声明一个可变形参。
*/
//JDK5.0之前:采用数组形参来定义方法,传入多个同一类型变量
//publicstaticvoidtest(inta,String[]books);
//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
//publicstaticvoidtest(inta,String...books);
publicclassMethodArgsTest{
publicstaticvoidmain(String[]args){
MethodArgsTesttest=newMethodArgsTest();
test.show(12);
test.show("hello");
test.show("hello","world","AA","BB");
//test.show(String[]{"AA","BB","CC"})
}
publicvoidshow(inti){
}
publicvoidshow(Strings){
System.out.println("show(String)");
}
publicvoidshow(String...strs){
System.out.println("show(String...strs)");
for(inti=0;i
到此这篇关于Java语法糖之个数可变的形参的实现的文章就介绍到这了,更多相关Java个数可变的形参内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!