Javaで空のリストを返す

2015年6月8日月曜日

Java

メソッドからコレクションを返す場合、無効な状態を表すのにnullを返すのではなく、要素数0のコレクションを返すのが良い作法とされている。
でも、その度に新しいインスタンスを作成するのは無駄なようにも思える。
そういう場合はjava.util.CollectionsクラスのemptyListメソッドで空のListインスタンスを取得する方法がある。

if (apple.equals(orange)) {
    return Collections.emptyList();
}

emptyList以外にもemptyMap等あるので、使いたいコレクション型に合わせて、メソッドを呼べばいい。

気をつけなくちゃいけないのはemptyListで返されるListは変更不可能ということだ。
あくまで読み取り用のコレクションを返す場合に使える方法だ。
以下のようにemptyListで取得したListに要素を追加しようとすると例外が発生する。

List<String> strs = Collections.emptyList();
strs.add("orange");
Exception in thread "main" java.lang.UnsupportedOperationException
        at java.util.TreeMap.compare(TreeMap.java:1290)
        at java.util.TreeMap.put(TreeMap.java:538)
...