Javaの可変長引数

引数の個数を自由に変えたい

生徒
生徒

教授?
Javaでメソッドに渡す引数の個数を自由に変えたいのですが、良い方法はありますか?

教授
教授

それは、可変長引数ですね?
Javaの可変長引数とは、メソッドに渡す引数の個数を柔軟に変えられる機能です。
メソッドの引数の型の直後に「…」(ピリオドを3つ)を付けて宣言します。
次のようになりますよ?

public class Test {
  public static void main(String[] args) {
    // 可変長引数を使ったメソッドを呼び出す
    printSum(1, 2); // 引数が2個
    printSum(3, 4, 5); // 引数が3個
    printSum(6, 7, 8, 9); // 引数が4個
  }

  // 可変長引数を使ったメソッドの定義
  public static void printSum(int... numbers) {
    int sum = 0;
    for (int n : numbers) {
      sum += n;
    }
    System.out.println("合計は" + sum + "です");
  }
}
生徒
生徒

へぇー。
こうなるのですね。

教授
教授

先ほどのコードでは、printSumというメソッドが可変長引数を使って定義されていますよ?
このメソッドは、int型の任意の個数の引数を受け取り、その合計を表示します。
可変長引数は、配列として扱われます。
この場合、numbersという配列に引数が格納されます。
メソッド呼び出し時に渡す引数の個数に応じて、配列の要素数が変わります。
printSum(1, 2)と呼び出した場合、numbersは要素数2の配列になります。
printSum(3, 4, 5)と呼び出した場合、numbersは要素数3の配列になります。

このように、可変長引数を使うと、メソッドに渡す引数の個数を柔軟に変えられます。

可変長引数の注意点

生徒
生徒

可変長引数を使う時の注意点はありますか?

教授
教授

可変長引数は、各メソッドに1つだけ指定できます。
2つ以上の可変長引数を同時に宣言することはできません。
また、可変長引数は、メソッドの最後にしか指定できません。
他の引数よりも前に可変長引数を宣言することはできません。
注意点を守らないと、コンパイルエラーが発生しますよ?

生徒
生徒

なるほど。
浮気しないで自分だけを見て欲しいのですね。

教授
教授

ふむふむ。
君が何人目か、ということは気にしないのですね?

生徒
生徒

ええ、私は相手のスペックに応じて対応しますので。
私のときめきは可変長なのです。

教授
教授

ヤレヤレ。
色々と敵に回しても知りませんよ?

タイトルとURLをコピーしました