可変長引数 − 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");
以下の注意点を理解した上で使用すること。
- 「...」として宣言した可変長引数は、実際には配列となる。したがって、メソッドの中で引数を使う場合、実際には配列の要素にアクセスすることになる。
- いくつかの引数を持つメソッドの場合、「...」という宣言は、最後の引数にしか書くことができない。
- 「...」として宣言した可変長引数では、引数の個数が0個でもよい。
- 名前が同じで引数が異なるメソッドがある場合(オーバーロード)、メソッド呼び出しにおいて、引数の個数が固定のメソッドと、可変長引数を持つメソッドの両方にマッチした場合には、前者のメソッドが優先される。
void doSomething(String arg1) { …略… } void doSomething(String... args) { …略… } // 呼び出し時 doSomething("arg"); // 上が呼ばれる doSomething(); // 下が呼ばれる