可変長引数メソッドの利用について

可変長引数メソッドによるリストの初期化

リリース1.5より可変長引数が導入されたことにより、リストの初期化を以下のように行うことが出来るようになった。

List<String> homophones = Arrays.asList("to", "too", "two");

利用できなくなったイディオム

可変長引数導入以前は、配列の内容を表示するのに以下のイデオムが使用できたが、リリース1.5以降では使用できなくなった(myArrayはオブジェクト配列)。

System.out.println(Arrays.asList(myArray));

リリース1.5以降では、オブジェクト配列が最初の配列要素の中に取り込まれてしまう。

リリース1.4での定義
public static List asList(Object[] a)

リリース1.5での定義
public static List asList(T... a)

可変長引数は、メソッドが本当に可変長引数の値列に対して操作を行う場合にだけ使用するべきで、パラメータの最後に配列を受け取るメソッドは全て可変長引数を使用するべきではない。


リリース1.5以降で配列の中身を文字列として得るにはArraysに追加されたメソッドが使用できる。

System.out.println(Arrays.toString(myArray));

可変長引数メソッドの簡単なおさらい

可変長引数メソッドがリリース1.5より追加された。可変長引数メソッドは、printfとコア・リフレクション機構のために設計された。以下簡単な使用例

static int sum (int... args) {
    int sum = 0;
    for (int arg : args)
        sun += arg;
    return sum;
}

可変長引数メソッドの留意点

  • 可変長引数メソッドには0個の引数が渡せること注意
  • 可変長メソッド呼び出しは、毎回配列を生成して初期化するため、パフォーマンス的には不利 (パフォーマンスが重要な箇所では、少ない個数用には通常のメソッドを提供し、それに加え、任意個数の引数を受け取る可変長引数メソッドを定義する方が良い)