开发过程中,经常会生成对象,但是绝大多数的时候,若返回null对象,就会抛出空指针异常。
例如在编写DAO层的底层是会开放一个接口:
/**
* 获得页面传递过来的组合条件
* @return
*/
public abstract List<Criterion> getCriterions(T entity);
/**
* 查询约束:
*根据Criterion条件创建Criteria.
*
* @param entity
* @return
*/
public Criteria createCriteria(T entity) {
List<Criterion> criterions = getCriterions(entity);
Criteria criteria = getCurrentSession().createCriteria(getEntityClass());
if(null != criterions) {
for (Criterion c : criterions) {
criteria.add(c);
}
return criteria;
}
所有引用getCriterions(T entity);均要进行非空判断否则就报空指针异常。
看getCriterions(T entity);一个具体的实现
@Override
public List<Criterion> getCriterions(User entity) {
if(entity != null){
List<Criterion> criterions = new ArrayList<Criterion>();
if(StringUtils.isNotEmpty(entity.getName())){
criterions.add(getCriterionWithSQlRestriction("name",entity.getName()));
}
return criterions;
}
return null;
}
现在修改
public Criteria createCriteria(T entity) {
List<Criterion> criterions = Optional.fromNullable(getCriterions(entity)).or(new ArrayList<Criterion>());
Criteria criteria = getCurrentSession().createCriteria(getEntityClass());
for (Criterion c : criterions) {
criteria.add(c);
}
return criteria;
}
具体的例子可参考:Guava-Optional可空类型
API详细介绍:[Google Guava] 1.1-使用和避免null