LoginSignup
13

More than 5 years have passed since last update.

Javaのソースで見つけた ...(点3つ) って何?から知る可変長引数

Last updated at Posted at 2018-01-15

きっかけ

Javaのソースで...(点3つ)の引数を見かけた。

何だ...って?
    private static void printArgs(String description, Object... args) {
        for (Object object : args) {
            System.out.println(object);
        }
    }

...(点3つ)は可変長引数を表します。

可変長引数は、指定された型の引数を複数指定できます。

引数を指定してみる
        // コレでもOK
        printArgs("1つ", "複数");
        // コレもOK
        printArgs("2つ", "複数", "指定");
        // コレもOK
        printArgs("3つ", "複数", "指定", true);
        // コレだってOK
        printArgs("なし");
結果
1つ : 複数
2つ : 複数指定
3つ : 複数指定true
なし : 

可変長引数は、配列を定義したも同然です。

可変長引数のメソッドをコンパイルすると配列になります。

コンパイル後
    public void methodName(String description, Object[] vars)
        メソッドの中身.
    }

可変長引数は、配列も指定できます。

引数に配列も指定できます
// コレでもOK
methodName("配列", new int[]{1,2,3,4,5});
// コレすらOK
methodName("配列と1つ", new int[]{1,2,3,4,5}, "複数");

可変長引数は、使い方に決まりがあります。

配列を引数にとるオーバーロードはダメ
理由 : コンパイルしたら同じになるから

配列を引数にとるオーバーロードはダメ
    public void methodName(String description, Object... vars)
        メソッドの中身.
    }
    public void methodName(String description, Object[] vars)
        メソッドの中身.
    }

可変長引数は最期に指定しないとダメ
理由:たぶん、どこまでが可変長引数に指定している値かわからなくなるから

可変長引数は最期に指定しないとダメ
// argsでコンパイルエラーになり、Eclipseだとこんなメッセージが出ます。(ざっくり訳 : 可変長引数は最後に書いてね)
// 「The variable argument type Object of the method printArgs must be the last parameter」
    private static void printArgs2(Object... args, String description) {
        メソッドの中身.
    }

可変長引数は1つしか指定できない
理由:たぶん、どこからどこまで1つ目かわかんなくなるし、1つ目の可変長引数が最期に指定されていないことになるから

可変長引数は1つしか指定できない
// args2でコンパイルエラーになり、Eclipseだとこんなメッセージが出ます。
// 「The variable argument type Object of the method printArgs must be the last parameter」
    private static void printArgs2(String description, String... args2, Object... args) {
        メソッドの中身.
    }

// こうするとコンパイルエラーにならない
    private static void printArgs2(String description, String[] args2, Object... args) {
        メソッドの中身.
    }

おまけ

JUnitで引数に配列や可変長引数をとるprivateメソッドをテストする方法 - Qiita

:sunny:可変長引数の説明をしてくれているサイト様:sunny:

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13