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

生徒
教授?
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つ以上の可変長引数を同時に宣言することはできません。
また、可変長引数は、メソッドの最後にしか指定できません。
他の引数よりも前に可変長引数を宣言することはできません。
注意点を守らないと、コンパイルエラーが発生しますよ?

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

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

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

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