最近编码遇到了一个疑惑,业务代码包括同事的经常发生空指针报错(正常有值的时候不会,但是开发环境数据混乱,测试的时候就经常发生了)。
那么是不是每个方法都需要对其入参进行判null呢?
比如下面的每个方法都需要对入参进行判null:
private void xxx(Map<String, Object> map) {
if(map != null) {
Object value = map.get("key");
}
}
private void xxx(List<String> list) {
if(list != null && list.size() > 0) {
list.get(0);
}
}
private void xxx(String str) {
if(str != null) {
str.indexOf(".");
}
}
因为方法是无法保证入参绝对不是null的,但是这样做就会导致到处都是判null的代码,很丑陋。
请问各位是如何应对的
public修饰的方法最好都判断,可以直接判断,或者Assert类的方法、或者使用非空注解、或者用Optional的方法。private修饰的方法,不对外,调用地是已经知道的,调用地做好保证就好了,不需要都判断
1.是不是每个方法都需要对其入参进行判null呢
正常业务确实是需要这样的 。
工具类判断可能会好看一点儿
增加一个全局异常处理类,然后你的方法不需要if判断,直接使用即可,代码如下
@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
/**
* 处理空指针的异常
* @param req
* @param e
* @return
*/
@ExceptionHandler(value =NullPointerException.class)
@ResponseBody
public HttpResult exceptionHandler(HttpServletRequest req, NullPointerException e){
logger.info(e.getMessage());
return HttpResult.error("参数不能为null!");
}
}
这个字段在业务上有什么意义,为什么会为空,先考虑这个再判断npe,有的是表面npe,其实是业务有问题