在JDK 5中,Java包含了一项函数,该函数简化了需要采用可变数量参数的方法的创建。此函数称为varargs,可变长度参数为short-form。带有可变数量参数的方法是varargs方法。
在JDK 5之前,可变长度参数可以通过两种方式处理。一个使用重载方法(每个使用一个重载),另一个使用参数重载到数组中,然后将此数组传递给方法。它们都可能是error-prone,并且需要更多代码。 varargs函数提供了更简单,更好的选择。
varargs的语法:
可变长度参数由三个句点(…)指定。例如,
public static void fun(int ... a) { // method body }
该语法告诉编译器可以使用零个或多个参数来调用fun()。结果,这里a被隐式声明为int []类型的数组。以下是用于说明上述概念的代码段:
// Java program to demonstrate varargs
class Test1
{
// A method that takes variable number of integer
// arguments.
static void fun(int ...a)
{
System.out.println("Number of arguments:" + a.length);
// using for each loop to display contents of a
for (int i:a)
System.out.print(i + " ");
System.out.println();
}
// Driver code
public static void main(String args[])
{
// Calling the varargs method with different number
// of parameters
fun(100); // one parameter
fun(1, 2, 3, 4); // four parameters
fun(); // no parameter
}
}
输出:
Number of arguments:1 100 Number of arguments:4 1 2 3 4 Number of arguments:0
- …语法告诉编译器已使用了varargs,这些参数应存储在a所引用的数组中。
- 变量a作为数组操作。在这种情况下,我们将a的数据类型定义为int。因此,它只能采用整数值。可以使用a.length来找到参数的数量,这是我们在Java中找到数组长度的方式。
以上程序说明:
注意:一种方法也可以具有可变长度的参数以及其他参数,但是应确保在方法声明的参数列表中仅存在一个应最后写入的varargs参数。
int nums(int a, float b, double … c)
在这种情况下,前两个参数与前两个参数匹配,其余参数属于c。
// Java program to demonstrate varargs with normal
// arguments
class Test2
{
// Takes string as a argument followed by varargs
static void fun2(String str, int ...a)
{
System.out.println("String:" + str);
System.out.println("Number of arguments is:"+ a.length);
// using for each loop to display contents of a
for (int i:a)
System.out.print(i + " ");
System.out.println();
}
public static void main(String args[])
{
// Calling fun2() with different parameter
fun2("GeeksforGeeks", 100, 200);
fun2("CSPortal", 1, 2, 3, 4, 5);
fun2("forGeeks");
}
}
String:GeeksforGeeks Number of arguments is:2 100 200 String:CSportal Number of arguments is:5 1 2 3 4 5 String:forGeeks Number of arguments is:0
重要事项:
- Vararg方法也可以重载,但重载可能导致歧义。
- 在JDK 5之前,可变长度参数可以用两种方法处理:一种方法是使用重载,另一种方法是使用数组参数。
- 一个方法中只能有一个变量参数。
- 可变参数(varargs)必须是最后一个参数。
Erroneous varargs Examples
- 在单个方法中指定两个varargs:
void method(String... gfg, int... q) { // Compile time error as there are two // varargs }
- 将varargs指定为method的第一个参数,而不是最后一个参数:
void method(int... gfg, String q) { // Compile time error as vararg appear // before normal argument }
注:本文由纯净天空筛选整理自 Variable Arguments (Varargs) in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。