我读过几本书和看了几篇博客,讨论了返回空集合比返回空值更好的问题。我完全理解尝试避免检查,但我不明白为什么返回空集合比返回null更好。例如:
public class Dog{
private List<String> bone;
public List<String> get(){
return bone;
}
}
对决
public class Dog{
private List<String> bone;
public List<String> get(){
if(bone == null){
return Collections.emptyList();
}
return bone;
}
}
例子一会抛出NullPointerException,而例子二会抛出UnsupportedOperation异常,但它们都是非常通用的异常。什么因素使一个比另一个更好或更糟糕呢?
另外,第三个选项是这样做:
public class Dog{
private List<String> bone;
public List<String> get(){
if(bone == null){
return new ArrayList<String>();
}
return bone;
}
}
但问题在于这样做会给您的代码添加意外的行为,可能需要其他人来维护。我真的正在寻找解决这个困境的方法。许多博客上的人倾向于只是说没有详细的解释为什么最好。如果返回一个不可变列表是最佳实践,那么我可以这样做,但我想了解为什么它更好。
addBone(String)
方法;get()
方法最好返回不可变值或可变副本。 - Andy Turner