1 不建议的写法
如下代码例子:
private final List<Cheese> cheesesInStock = ...;
public static List<Cheese> getCheeses(){
return cheesesInStock.isEmpty() ? null : new ArrayList<>(cheesesInStock);
}
public static void main(String[] args) {
List<Cheese> cheeses = getCheeses();
if (cheeses != null){
...
}
}
- 对于一个返回null而不是零长度数组或者集合的方法,几乎每次调用该方法时都需要做非空判断
- 编写调用该方法的程序员可能会忘记非空判断
- 返回null而不是零长度的容器,也会使返回该容器的方法实现代码变得复杂
2 null返回值的性能更好?
- 除非分析表明这个方法时造成性能问题的真正源头,不然在这个级别上担心性能问题是不明智的
- 返回零长度的集合或数组,可以通过返回同一个不可变的零长度集合,避免了分配的执行,因为不可变对象可以被自由共享
public static List<Cheese> getCheeses(){
return cheesesInStock.isEmpty() ? Collections.emptyList()
: new ArrayList<>(cheesesInStock);
}