Javaのメソッドに可変長の引数を渡します

こんにちは、さるまりんです。

今日はJavaの小ネタです。

Javaのメソッドは可変長の引数を取ることができます。
引数の数が決まっていない引数です。

引数の型の後ろに...(ピリオドを3つ)つけます。

次のメソッドは複数のint型の引数をとり、その合計を計算して返却します。

public static int addAll(int... is) {
    int total = 0;
    for (int i: is) {
        total += i;
    }
    return total;
}

次のコードで呼び出すと

int total = addAll(1, 5, 8, 99, 3, -5);
System.out.println("total is " + total);

出力はこうなります。

total is 111

さっきのメソッドaddAll()は全てint型の引数を取っていましたが、Objectクラスの引数にするとなんでも取れるようになります。

こんな感じです。

public static String concatAll(Object... os) {
    StringBuilder sb = new StringBuilder();
    String space = "";
    for (Object o: os) {
        sb.append(space).append(o);
        space = " ";
    }
    return sb.toString();
}

受け取った引数をスペース区切りで繋いでできた文字列を返却しています。

次のコードで実行すると

String str = concatAll("I am", "salumarine.", 'I', "get up at", 6, "in the morning.", "That's", true);
System.out.println(str);

こんな出力になります。

I am salumarine. I get up at 6 in the morning. That's true

受け取っている引数の型はのはStringcharintbooleanと様々ですが特殊な処理をせずに全て繋いで文字列にしてくれました。

Objectクラスでもらってどんな処理をするのかは考えどころですが、便利な局面もあるかもしれないです。

読んでくださってありがとうございました。

それではまた!