空值的判断及处理
1、对数据源进行查询后,如果没有查到对应值,返回结果是null、还是一个空对象类型,如:
public interface UserSearchService{
List<User> listUser();
User get(Integer id);
}
2、listUser接口的实现
public List<User> listUser(){
List<User> userList = userListRepostity.selectByExample(new UserExample());
if(CollectionUtils.isEmpty(userList)){
return Lists.newArrayList();//guava类库提供的方式
}
return userList;
}
返回为一个空list,而不应该是null
3、get接口的实现
如果查询没有结果,通过java.util.Optional设置默认值、或者返回一个自定义空对象、或者抛出异常
4、对对象的判空:
Preconditions.checkNotNull();
Preconditions.checkArgument();
CollectionUtils.isEmpty(Collection);
StringUtils.isEmpty(str)
Objects.nonNull(obj)
5、使用java8中的Optional来实现
Optional.of(str).filter(str -> Pattern.matches(regex, str))
.orElseThrow(() -> new IllegalArgumentException("str is illegal"));
打日志
1、使用参数化信息的方式,使用[]进行参数变量隔离,不要进行字符串拼接
logger.debug("Processing trade with id:[{}] and symbol : [{}] ", id, symbol);
2、对于debug日志,必须判断是否为debug级别后,才进行使用
if (logger.isDebugEnabled()) {
logger.debug("Processing trade with id: " +id + " symbol: " + symbol);
}
异常
1、如果要抛出异常,就不必log.error把异常堆栈日志输出,而是在catch异常的地方输出
2、也可以通过使用Optional来实现来抛出异常
类、包命名
1、一个对象实体,所属的包名应该是com.xxx.entity,而不是domain
2、只要是用于网络传输的对象,我们都认为他们可以当做是DTO对象,所以名字应该为:XXXDTO
创建对象
1、使用BeanUtils.copyProperties(sourceBean,destinationBean);
2、使用lombok
建议:
guava包是一个非常好的工具包!