对于应用系统最头疼的莫过于要写很多的非空处理,经过一些资料研究,对于空指针的处理,做如下总结(SSM)():
根据部分博客及框架源码分析得出的结论
总结:具体情况具体分析
1.有的地方允许传空,也允许返回空,这种情况下不做非空处理
2.系统安全性大于冗余的非空处理
3.controller层的入参是比做非空处理的,为了方便处理,建议使用注解的方式@NotNull
4.通过约定,避免不必要的非空判断
controller对service出参进行判断
service对入参做非空处理,减免controller大量冗余(下层判断,上层省去)
dao层不做非空判断,service调用dao时做非空处理
非空处理,包括无需判断,入参非空判断,方法内部调用其他时判断,出参判断
PS:有一种观点认为,在程序所有地方均匀许空对象的存在,将空对象封装成一种特殊对象,该对象有对应的方法,有相关属性或没有部分相关属性
对于部分不会抛异常的地方,可以放松控制:
public abstract class ErrorCodeException extends Exception{
protected ErrorCode errorCode;
abstract void getErrorCode();
public ErrorCodeException(ErrorCode errorCode) {
super(errorCode.getMsg());
this.errorCode = errorCode;
}
}