可変長引数 − Varargs

当たり前体操が流行っているということで、当たり前「可変長引数」について覚書。

  • 可変長引数を利用しない場合
void doSomething(String[] args) {
    …略…
}

// 呼び出し時
doSomething(new String[]{});
doSomething(new String[]{"a"});
doSomething(new String[]{"a","b"});
  • 可変長引数を利用する場合
void doSomething(String... args) {
    …略…
}

// 呼び出し時
doSomething();
doSomething("a");
doSomething("a","b");

以下の注意点を理解した上で使用すること。

  1. 「...」として宣言した可変長引数は、実際には配列となる。したがって、メソッドの中で引数を使う場合、実際には配列の要素にアクセスすることになる。
  2. いくつかの引数を持つメソッドの場合、「...」という宣言は、最後の引数にしか書くことができない。
  3. 「...」として宣言した可変長引数では、引数の個数が0個でもよい。
  4. 名前が同じで引数が異なるメソッドがある場合(オーバーロード)、メソッド呼び出しにおいて、引数の個数が固定のメソッドと、可変長引数を持つメソッドの両方にマッチした場合には、前者のメソッドが優先される。
void doSomething(String arg1) {
    …略…
}
void doSomething(String... args) {
    …略…
}

// 呼び出し時
doSomething("arg");  // 上が呼ばれる
doSomething();       // 下が呼ばれる