当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Variable Arguments(Varargs)用法及代码示例


在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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。