Arrays.asListの使いどころ

Arrays.asList()は、配列*1を引数にとって固定長のjava.util.List型のオブジェクトを生成するメソッドです。

このstaticメソッドが返すオブジェクトはjava.util.Arrays$ArrayListクラスでインスタンス化され、内部的にはListの型パラメータで指定した型(なければjava.io.Serializable型)の配列として保持されています。

Arrays.asListで生成したListオブジェクトに対して、そうとは知らずに後続の処理でaddしようとするとjava.lang.UnsupportedOperationExceptionが発生します。removeでも同様です。要素の書き換えはできるけど、要素数の変更はできないというわけですね。

型だけだとこの危険性を検知できないので、使いどころは固定長である事が自明なところ*2か、明らかにそうと分かるようなフィールド名を付けた場合ということになるでしょうか。

*1:あるいは可変長引数・・も結局配列ですが

*2:と言っても100%言い切れるかというと微妙