参考链接:
https://developer.aliyun.com/ask/62145?spm=a2c6h.13159736
https://www.cnblogs.com/DFX339/p/9945771.html
问题分析:
//判断1 : 这里会返回 true
User user = null;
if(user == null){
return true;
}else{
return false;
}
//判断2 : 这里会返回 false
User user = new User();
if(user == null){
return true;
}else{
return false;
}
原因: User user = new User(); 这时候已经创建了一个对象,所以user不会为null
以上示例比较简单,一目了然,看起来没有任何问题。
" 但是其实当你需要判断的对象为前端传过来的对象时,单纯的使用 object == null 去判断是不够的,因为前端传过来的对象会是 判断2 的样子。
对象不为null,但是对象的所有属性均为null。[boolean类型除外,以及序列化值除外,可能还有其他特殊值~ 欢迎补充哟] "
" " 所标识的内容如果不够清晰,请参考上一篇博客: https://www.cnblogs.com/DFX339/p/9896476.html
解决思路:
创建Util类,使用反射对对象的属性进行判断
注意:
当你需要判断Java对象是否为null的时候,你可以先通过 obj == null 去判断,如果obj 不等于null,再根据业务需求决定是否需要进一步判断 obj的所有属性是否都为null。
public boolean objCheckIsNull(Object object){
Class clazz = (Class)object.getClass(); // 得到类对象
Field fields[] = clazz.getDeclaredFields(); // 得到所有属性
boolean flag = true; //定义返回结果,默认为true
for(Field field : fields){
field.setAccessible(true);
Object fieldValue = null;
try {
fieldValue = field.get(object); //得到属性值
Type fieldType =field.getGenericType();//得到属性类型
String fieldName = field.getName(); // 得到属性名
System.out.println("属性类型:"+fieldType+",属性名:"+fieldName+",属性值:"+fieldValue);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if(fieldValue != null){ //只要有一个属性值不为null 就返回false 表示对象不为null
flag = false;
break;
}
}
return flag;
}