第43条:返回零长度的数组或者集合,而不是null
private final List<Cheese> cheesesInStock = ...; public Cheese[] getCheese() { if(cheesesInStock.size() == 0) return null; ... }
如果返回null,
在客户端处理代码就需要有额外的代码来处理null返回值:
Cheese[] cheeses = shop.getCheeses(); if(cheeses != null && Arrays.asList(cheese).contains(Cheese.STILTON)) System.out.println("Jolly good"); }
而不是:
Cheese[] cheeses = shop.getCheeses(); if( Arrays.asList(cheese).contains(Cheese.STILTON)) System.out.println("Jolly good"); }
认为null返回值比零长度数组更好,因为避免了分配数组所需要的开销,是不对的。
1.除非分析表明这是方法的确影响了性能
2.对于不返回任何类型调用,返回同一个零长度数组是可能的
Collections类提供当需要空集合时都返回同一个不可变的空集合的方法:
public List<Cheese> getCheeseList() { if(cheeseInstock.isEmpty)) { return Collections.emptyList(); else return new ArrayList<Cheese>(cheesesInStock); }