nullではなくゼロ長の配列または集合を返します.

2381 ワード

まず悪い例を挙げましょう.
nullを返す場合
private final List<Cheese> cheesesInStock = ...;



public Cheese[] getCheeses() {

    if(cheesesInStock.size() == 0)

        return null;

    ...

}

上記の例では、クライアント・プログラムが次のように処理されます.
Cheese[] cheeses = shop.getCheeses();

if(Cheeses != null &&

    Arrays.asList(cheeses).contains(Cheese.STILTON))

    System.out.println("Jolly good, just the thing.");

クライアント・プログラマーはCheeseがnullであるかどうかを判断する必要があり、クライアント・コードを書くのに苦労し、クライアント・プログラマーもnullであるかどうかを判断することを忘れやすいことがわかります.
したがって,0であっても配列または集合の個数を返すことが望ましい.
配列の個数を返すと、クライアントコードは以下のように簡単に書くことができます.
if(Arrays.asList(cheeses).contains(Cheese.STILTON))

    System.out.println("Jolly good, just the thing.");

また、集合値は、空の集合を返す必要があるたびに、同じ不変の空の集合を返すようにしてもよい.例:Collections.emptySet、emptyList、およびemptyMap.
例は次のとおりです.
public List<Cheese> getCheeseList() {

    if(cheesesInStock.isEmpty())

        return Collections.emptyList();

    else

        return new ArrayList<Cheese>(cheesesInStock);

}