Ye *_*Win 7 java null dao nullpointerexception null-object-pattern
阅读后:
有效的Java(参见条款43) - Joshua Bloch
清洁代码(不要返回空) - Bob叔叔
避免!= null语句
Null对象模式
我正在寻找答案,当搜索最终成为非收集对象不存在的实体时,DAO应该返回什么.通过使用空数组或emptyList方法,集合对象确实可以.但是对于非收藏品,它可能会更难.另一种解决方案是永远不会返回null,而是使用Null Object模式.但是我不知道将Null Object模式与DAO集成,我真的很高兴看到与Null Object模式和DAO模式的完美集成,特别是对于模型(dto)对象返回情况.
我将非常感谢并欢迎任何最佳设计模式,场景和建议.
Nic*_*tto 17
确实引入null引用可能是编程语言历史上最糟糕的错误之一,即使它的创建者Tony Hoare称其为数十亿美元的错误.
null根据您的Java版本,以下是最佳替代方案:
Java 8及以上从Java 8开始, 您可以使用java.util.Optional.
以下是如何在您的案例中使用它的示例:
public Optional<MyEntity> findMyEntity() {
MyEntity entity = // some query here
return Optional.ofNullable(entity);
}
Run Code Online (Sandbox Code Playgroud)
Java 8之前的Java 8,你可以使用com.google.common.base.Optional从谷歌番石榴.
以下是如何在您的案例中使用它的示例:
public Optional<MyEntity> findMyEntity() {
MyEntity entity = // some query here
return Optional.fromNullable(entity);
}
Run Code Online (Sandbox Code Playgroud)
您需要做的就是返回一个空对象 - 比如您在DAO中拥有的客户条目
if(result == null){return new EmptyUser(); }
其中EmptyUser扩展User并将相应的条目返回到getter调用,以允许其余代码知道它是一个空对象(id = -1等)
一个小例子
public class User {
private int id;
private String name;
private String gender;
public String getName() {
//Code here
}
public void setName() {
//Code here
}
}
public class EmptyUser extends User {
public int getId() {
return -1;
}
public String getName() {
return String.Empty();
}
}
public User getEntry() {
User result = db.query("select from users where id = 1");
if(result == null) {
return new EmptyUser();
}
else {
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2878 次 |
| 最近记录: |