可変引数

広告

JavaではJ2SE5.0のバージョンから新しく可変個の引数を持つメソッドを定義できるようになりました。書式は次の通りです。

public static void main(String args[]){
  メソッド名(値1);
  メソッド名(値1, 値2);
  メソッド名(値1, 値2, 値3);
}

修飾子 戻り値の型 メソッド名(データ型... 変数名){
  /* メソッド内で実行する処理 */
}

※メソッド定義の引数のところに書かれている「...」は省略を意味するものではなくドット「.」を3つ並べて記述します。

このメソッドの場合、メソッドを呼び出す時の引数を任意の数だけ記述することができるようになります。メソッド側では引数の箇所に記述した変数名を持つ配列を受け取ったように処理が行われます。

例えば次のように使用します。

public static void main(String args[]){
  disp(10, 7, 8);
}

private static void disp(int... num){
  for (int i = 0; i < num.length; i++){
    System.out.println(num[i]);
  }
}

メソッドを呼び出す時に引数を3つ指定しています。メソッドを受け取る側では配列の要素に順に引数が格納されたかのように扱いますので、メソッド内では要素を参照することで引数を利用することができるようになります。

これは次のように記述した場合とほぼ同じです。

public static void main(String args[]){
  int num[] = {10, 7, 8};
  disp(num);
}

private static void disp(int num[]){
  for (int i = 0; i < num.length; i++){
    System.out.println(num[i]);
  }
}

なお、引数の数は任意ですが引数のデータ型は同じである必要があります。また引数は何個渡されてくるのかはメソッドが呼ばれるまで分かりませんので、引数の数を知るには「配列変数名.length」を使って配列の長さを取得して下さい。また可変引数の場合、引数は0であっても構いません。

サンプル

では簡単な例で試しておきます。

JSample9_1.java

class JSample9_1{
  public static void main(String args[]){
    System.out.println(sum(4, 10));
    System.out.println(sum(7, 2, 8));
    System.out.println(sum());
  }

  private static int sum(int... nums){
    int sum = 0;

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

    return sum;
  }
}

コンパイル後に実行すると次のように表示されます。

p9-1

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)