在 Java 中使用可變引數 (varargs) 時,有哪些規則需要遵守?
從 JSE 1.5 開始,您可以將可變數量的值作為引數傳遞給方法。這些引數被稱為可變引數 (varargs),它們由三個點 (...) 表示。
語法
public myMethod(int ... a) { // method body }
在 Java 中使用可變引數的規則
- 每個方法只能有一個可變引數。如果您嘗試使用多個可變引數,則會生成編譯時錯誤。
示例
在下面的 Java 示例中,我們嘗試從 sample() 方法接受兩個可變引數。
public class VarargsExample{ void demoMethod(int... ages), String... names) { for (int arg: ages) { System.out.println(arg); } } }
編譯時錯誤
編譯時,上述程式會生成以下錯誤:
VarargsExample.java:2: error: ')' expected void demoMethod(int... ages, String... names) { ^ VarargsExample.java:2: error: <identifier> expected void demoMethod(int... ages, String... names) { ^ VarargsExample.java:2: error: <identifier> expected void demoMethod(int... ages, String... names) { ^ 3 errors
- 在方法的引數列表中,可變引數必須是最後一個。否則,將生成編譯時錯誤。
示例
在下面的示例中,VarargsExample 類有一個名為 demoMethod() 的方法,它接受 3 個引數:一個可變引數、一個字串和一個整數。
這裡我們將可變引數放在引數列表的第一個位置。
public class VarargsExample{ void demoMethod(int... marks, String name, int age) { System.out.println(); System.out.println("Name: "+name); System.out.println("Age: "+age); System.out.print("Marks: "); for (int m: marks) { System.out.print(m+" "); } } }
編譯時錯誤
編譯時,上述程式會生成以下錯誤。
VarargsExample.java:2: error: ')' expected void demoMethod(int... marks, String name, int age) { ^ VarargsExample.java:2: error: <identifier> expected void demoMethod(int... marks, String name, int age) { ^ VarargsExample.java:2: error: <identifier> expected void demoMethod(int... marks, String name, int age) { ^ 3 errors
如果您在 Eclipse 中編譯相同的程式碼,它會生成一個(相同的)錯誤,提示可變引數應該放在列表的最後,如下所示:
如果您想使此程式執行,則需要將可變引數放在方法引數列表的末尾。
public class VarargsExample{ void demoMethod(String name, int age, int... marks) { System.out.println(); System.out.println("Name: "+name); System.out.println("Age: "+age); System.out.print("Marks: "); for (int m: marks) { System.out.print(m+" "); } } public static void main(String args[] ){ VarargsExample obj = new VarargsExample(); obj.demoMethod("Krishna", 23, 90, 95, 80, 69 ); obj.demoMethod("Vishnu", 22, 91, 75, 94 ); obj.demoMethod("Kasyap", 25, 85, 82); obj.demoMethod("Vani", 25, 93); } }
輸出
Name: Krishna Age: 23 Marks: 90 95 80 69 Name: Vishnu Age: 22 Marks: 91 75 94 Name: Kasyap Age: 25 Marks: 85 82 Name: Vani Age: 25 Marks: 93
廣告