Назад Зміст Вперед

10.5. Використання var-args

Методи зі змінним числом аргументів - VarArgs

Починаючи з версії 5.0, в Java можна задавати методи зі змінним числом аргументів або "varargs" (не використовуючи для цієї мети масив або іншу колекцію - стандартний прийом без спеціального механізму мови). Робиться це так - після типу останнього аргументу можна задати три крапки, що означає, що цьому аргументу може відповідати довільне число фактичних аргументів:

public void m (T1 a1, T2 a2, String ... s)


Інтерпретація запису така: при виклику методу після двох фактичних аргументів можуть йти нуль, один, два і більше аргументу типу String. Метод може мати не більше одного такого varargs-аргументу, і він повинен йти останнім в списку формальних аргументів.

Ефект такий же, як якщо б останній аргумент був масивом (тут масив String). Метод міг би тоді використовувати властивості масиву s.length, щоб знайти, скільки значень було фактично передано, і s [i] для доступу до них.

Приклад 1.
public class VarArgsExample {
    int sumArrays(int[]... intArrays)
    {
        int sum, i, j;

        sum=0;
        for(i=0; i<intArrays.length; i++) {
            for(j=0; j<intArrays[i].length; j++) {
                sum += intArrays[i][j];
            }
        }

        return(sum);
    }

    public static void main(String args[])
    {
        VarArgsExample va = new VarArgsExample();
        int sum=0;

        sum = va.sumArrays(new int[]{1,2,3},
                           new int[]{4,5,6},
                           new int[]{100,200});
        System.out.println("The sum of the numbers is: " + sum);
    }
}

Приклад 2.    

  1. class VarargsExample1{  
  2.    
  3.  static void display(String... values){  
  4.   System.out.println("display method invoked ");  
  5.  }  
  6.   
  7.  public static void main(String args[]){  
  8.   
  9.  display();//zero argument   
  10.  display("my","name","is","varargs");//four arguments  
  11.  }   
  12. }  
  13.       
Output:display method invoked
       display method invoked

Приклад 3.    

  1.     
  2. class VarargsExample2{  
  3.    
  4.  static void display(String... values){  
  5.   System.out.println("display method invoked ");  
  6.   for(String s:values){  
  7.    System.out.println(s);  
  8.   }  
  9.  }  
  10.   
  11.  public static void main(String args[]){  
  12.   
  13.  display();//zero argument   
  14.  display("hello");//one argument   
  15.  display("my","name","is","varargs");//four arguments  
  16.  }   
  17. }  
  18.       
Output:display method invoked
       display method invoked
       hello
       display method invoked
       my
       name
       is 
       varargs

Правила varArgs

Правила полягають в наступному:
  • Там може бути тільки одна змінна аргумент в методі.
  • Змінна аргумент (змінні аргументи) повина бути останнім аргументом.

Приклади списків параметрів, які не компіллюються:
    
void method(String... a, int... b){}//Compile time error  
  
void method(int... a, String b){}//Compile time error  
      
Приклад varargs з останнім аргументом в методі:

Приклад 4. 

  1.  class VarargsExample3{  
  2.    
  3.  static void display(int num, String... values){  
  4.   System.out.println("number is "+num);  
  5.   for(String s:values){  
  6.    System.out.println(s);  
  7.   }  
  8.  }  
  9.   
  10.  public static void main(String args[]){  
  11.   
  12.  display(500,"hello");//one argument   
  13.  display(1000,"my","name","is","varargs");//four arguments  
  14.  }   
  15. }  

Output:number is 500
       hello
       number is 1000
       my
       name
       is 
       varargs
.