在 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

更新於:2019-07-30

235 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始學習
廣告