java 通过反射机制判断一个对象所有的属性是否为空

参考链接:

       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类,使用反射对对象的属性进行判断  

注意:

扫描二维码关注公众号,回复: 9597098 查看本文章

当你需要判断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;
    }
发布了100 篇原创文章 · 获赞 47 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/sl1990129/article/details/103149240