在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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。