Java可変長引数メソッドの呼び出しいろいろ
Javaの可変長引数(valiableArityMethod)は、Java1.5より新たに追加された機能で、printfなどの実装に使われています。
あまり自分で実装することのない機能なので、いざ使おうとすると思わなくところではまったりします。
可変長引数を実装したメソッドが予想外の呼ばれ方をしてエラーが発生したり…
というわけで、以下可変長引数メソッドの呼ばれ方と結果を載せておく。
/** * 可変長引数テストメソッド */ public final void valiableArityMethod() { String[] params = { "a", "b", "c" }; // 普通に呼び出し method(params); // 引数なし method(); // 空配列 method(new String[] {}); // null ※コンパイラ警告あり method(null); // 配列でキャストしたnull method((String[]) null); // 配列の型でキャストしたnull : 可変長引数に対して1個(値がnull)の引数が渡されたという意味になる method((String) null); } /** * 可変長引数実装メソッド */ private void method(final String... params) { // ※配列の中身を出力したい場合にparams.toString()としない <- ここ重要 System.out.println(Arrays.toString(params)); }
実行結果は以下のようになります。
[a, b, c] [] [] null null [null]
ここで注意しいたのは、メソッドにnullが渡される可能性があるということ。
うっかりnullチェックを忘れると実行時にエラーが発生するので注意が必要。
さらに、要素にnullが含まれる配列が渡される可能性もあるのでここも注意が必要。
※ method(null) について
可変長引数にnullを指定した場合、「呼び出しが曖昧である」という警告が発生します。
※これは「配列がnull(引数が無い)」なのか「nullが1つというデータ」なのか分からないためです。