可変引数メソッド(...) — 汎用ユーティリティ
Javaでは、メソッドの引数の数が決まっていない場合に 可変長引数(varargs) を使えます。これにより「0個以上の引数」を柔軟に受け取ることができ、ユーティリティメソッドを簡潔に書けます。
基本構文
戻り値の型 メソッド名(型... 引数名) {
// 引数名は配列のように扱える
}
Java型...と書くと「0個以上の引数」を受け取れる。- メソッド内では 配列 として扱える。
基本例
合計を計算するメソッド
int sum(int... nums) {
int total = 0;
for (int n : nums) {
total += n;
}
return total;
}
// 呼び出し例
System.out.println(sum()); // 0
System.out.println(sum(5)); // 5
System.out.println(sum(1, 2, 3, 4)); // 10
Java👉 引数の数が決まっていなくても呼び出せる。
通常引数との組み合わせ
可変長引数は 最後にしか置けない。
double average(String label, int... nums) {
int total = 0;
for (int n : nums) total += n;
return (nums.length == 0) ? 0 : (double) total / nums.length;
}
System.out.println(average("Math", 80, 90, 100)); // 90.0
System.out.println(average("Empty")); // 0.0
Java例題で練習
例題1: 最大値を求める
int max(int... values) {
if (values.length == 0) return Integer.MIN_VALUE;
int m = values[0];
for (int v : values) {
if (v > m) m = v;
}
return m;
}
System.out.println(max(3, 7, 2, 9)); // 9
Java👉 いくつでも渡せる最大値計算。
例題2: 文字列を連結する
String join(String... words) {
StringBuilder sb = new StringBuilder();
for (String w : words) {
sb.append(w);
}
return sb.toString();
}
System.out.println(join("Hello", " ", "World")); // Hello World
Java👉 文字列結合も柔軟に。
例題3: ログ出力ユーティリティ
void log(String level, String... messages) {
for (String msg : messages) {
System.out.println("[" + level + "] " + msg);
}
}
log("INFO", "Start", "Processing", "End");
Java👉 ラベル+複数メッセージをまとめて出力。
テンプレート集
基本形
戻り値型 メソッド名(型... args) {
for (型 a : args) {
// 処理
}
return 結果;
}
Java引数+可変長引数
戻り値型 メソッド名(型 fixed, 型... args) {
// fixed は必須、args は任意
}
Java注意点と落とし穴
- 最後にしか置けない: 可変長引数は引数リストの末尾に。
- 配列として渡せる:
sum(new int[]{1,2,3})のように配列を直接渡すことも可能。 - オーバーロードに注意: 可変長引数と配列引数は曖昧になりやすい。
- パフォーマンス: 毎回配列が生成されるため、大量呼び出しではオーバーヘッドになることもある。
まとめ
- 可変長引数(…) は「0個以上の引数」を柔軟に受け取れる。
- ユーティリティメソッド(合計、最大値、文字列結合、ログ出力など)に便利。
- 内部では配列として扱うので、ループ処理が基本。
- 最後にしか置けないというルールを覚えておく。
👉 練習課題として「注文金額をいくつでも渡せるメソッドを作り、合計と平均を返す」などを試すと、業務ロジックに直結した理解が深まります。
