マンガで分かる Java入門講座

第8章 メソッド
8-7. 可変長引数

引数の長さが変更可能な、可変長引数のメソッドの仕組みと作り方を紹介します。

● 可変長引数

 引数を、1~数個にしたいという場合はよくあります。その可能性を全て考慮してメソッドを作るのは非常に骨が折れます。

 Javaには、そういった場合に1つのメソッドを書くだけで済む方法が用意されています。それが「可変長引数」という引数の作り方です。

 可変長引数では「型... 変数」と書くことで、1以上の引数を設定しても自動で対応できるメソッドを作ることができます。

ソースコード)可変長引数
public static int sum(int... iArr) {
    int res = 0;
    for (int i = 0; i < iArr.length; i ++) {
        res += iArr[i];
    }
    return res;
}

● 可変長引数の禁止事項

 可変長引数は、必ずメソッドの引数の末尾に書かなければなりません。

ソースコード)誤った可変長引数の使い方
public static String sum(int... iArr, String s) {
    int res = sum(iArr);
    return s + res;
}

ソースコード)正しい可変長引数の使い方
public static String sum(String s, int... iArr) {
    int res = sum(iArr);
    return s + res;
}

● 可変長引数と通常の引数のメソッドが被った場合

 可変長引数のメソッドと、通常の引数のメソッドが同じクラス内にあり、見かけ上の引数の形が同じ場合は、通常の引数のメソッドが優先的に呼び出されます。

ソースコード)呼び出し側
System.out.println(MyClass.sum(1, 2));

ソースコード)呼び出されるのは「sum(int i0, int i1)」の方
package sample;

public class MyClass {
    public static int sum(int... iArr) {
        int res = 0;
        for (int i = 0; i < iArr.length; i ++) {
            res += iArr[i];
        }
        return res;
    }

    public static int sum(int i0, int i1) {
        int res = i0 + i1;
        return res;
    }
}

● 可変長引数のメソッドに配列を使う

 可変長引数の実体は配列です。そのため、引数に配列を設定しても動作します。

ソースコード)可変長引数のメソッドに配列を使う
System.out.println(MyClass.sum(new int[]{1, 2}));

この講座のマンガ部分は「箱人形マンガ(Box Comic) 」で作成しています。
作成:2013/05/31  更新:2013/05/31  [Permalink]