Javaの「可変長引数」

J2SE 5.0の新機能として追加された、「可変長引数」は普段あまり利用しませんが、共通メソッドに、任意の数のオプションを引数として渡せるようにしたい場合などに便利だと思います。


まず、「可変長引数」とは何かという話ですが、文字通り、あるメソッドの引数に任意の数の引数を渡すことができるというものです。可変長引数に対応したメソッドを呼び出す場合は、以下の例のように記述することができます。

method(); 
method("a"); 
method("a","b"); 
method("a","b","c");


可変長引数にするには、引数の型指定のあとに "..." と 3 つピリオドを続けて記述します。そして、受け側のメソッドは、結局、配列として扱うことになります。

void method(String... args) {
    // 受けたメソッドは、結局、配列として扱う
    for (String s : args){
        System.out.println(s);
    }
}


つまり、以前であれば、事前にパラメータ用の配列を生成していた処理を書かずに済むというメリットがあります。これは以下の引用にもある通り、開発者が書きやすくなるという程度ですので、利用するかは開発者の好みだと思います。

つまり、可変長引数を実現する機能は、配列によるエミュレーションの単なるシンタクス・シュガー(開発者が利用しやすいように書き換えた等価の構文)にすぎない。

itarchitect.jp


「可変長引数」を利用する場合の注意点としては、

  • メソッドが複数の引数をとる場合、最後の引数にしか利用できません。
  • 1つのメソッドで1つしか可変長引数を定義できません。
  • メソッドがオーバーロードされた場合、かつ、引数が固定のメソッドと可変個のメソッドがマッチした場合は、前者が優先されます。