作者:刘颖
在J2SE5.0之前,当一个方法要使用不定长度的参数时,就需要你先建立一个数组,然后把值赋给数组,将数组做为参数,传递给方法.
在J2SE5.0之后,出现了Varargs这个新特性,可以支持不定长度的参数(Variable-length Argument),这就可以帮您轻松解决不定长度参数的问题.
那么,如何来使用不定长度参数呢?
1.在参数类型和参数名之间使用"..."(记住,三个英文的点,不要忘记噢!),表示该参数是可变长的;
2.你可以使用增强的for循环来读取可变长度参数中的值,但笔者试了一下,使用传统的for循环也可以读取的,但一定要加上参数长度的判断;
3.在一个方法的参数列表中只能使用一次不定长度参数,且不定长度参数只能出现在参数列表的最后一项(到底是为什么,我们等一下再来讨论).
下面先来看个例子:
import java.util.Scanner;
public class Test {
public static void main(String[] args)
{
println("Hello!");
println("Good","morning!");
println("Welcome","to","Shanghai!");
}
public static void println(String... infos)
{
for(String info:infos)
{System.out.print(info+" ");}
System.out.println();}
}
将其中增强的for循环换成传统的for循环也是可以的.
for(int i=0;i<infos.length;i++)
System.out.print(infos[i]+" ");
其实,不定长度的参数的传递也是采用数组形式,但是Varargs新特性自动隐藏了这个过程,对开发人员屏蔽了其中的细节.
接下来,我们讨论一下,为什么一个方法的参数列表中只能使用一次不定长度参数,且不定长度参数只能出现在参数列表的最后一项呢.这样说吧,
假如我们这样定义了函数 public static void println(String... infos,int num),那么在编译的时候,系统将不知道前面的不定长度参数有多长,
哪个地方是下一个参数num的开始.同样,如果在一个参数列表中使用两个不定长度参数,那么编译器也不知道从何处开始下一个参数.
总的来说,有了Varags这个新特性后,你就不再需要重载不定长度参数的方法了,也不必为该调用哪个重载的方法而对着参数数来数去了.
|