返回零长度的数组或者集合,而不是null
让我们先举坏例子:
返回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); }