当前位置:首页 > Java技术 > Java中利用反射去判断一个对象所有属性是否都为空

Java中利用反射去判断一个对象所有属性是否都为空

2022年09月16日 15:47:31Java技术7

判断Java对象是否为null

第一种情况:  直接使用 object == null 去判断,对象为null的时候返回true,不为null的时候返回false。

第二种情况:在object != null 为true的情况 下,进一步去判断对象的所有属性是否为null。

被判断的类对象,随便写的一个

Java中利用反射去判断一个对象所有属性是否都为空 _ JavaClub全栈架构师技术笔记

针对第一种情况,直接使用null进行比较即可

Java中利用反射去判断一个对象所有属性是否都为空 _ JavaClub全栈架构师技术笔记

但是,只要学过java的人都知道,这个判断永远都是true,因为上面对象中定义了相应的属性,尽管对象的属性是空的,但是对象不为空,大多数情况我们都是想比较对象中的所有属性是否都为空。

这个时候,我们就可以用到java中的反射了,话不多说,直接上代码

package com.tensquare.article.controller;

import com.tensquare.article.pojo.Father;

import java.lang.reflect.Field;
import java.lang.reflect.Type;

/**
 * @Author: wlf
 * @Date: create in 2020/8/12 15:41
 * @Name:
 * @Function:
 * @Modified By:
 */
public class TestA {

    public static void main(String[] args) {
        Father father = new Father();
        if(objCheckIsNull(father)){
            System.out.println("对象中的所有属性都为空......");
        }
    }
    /**
     * 判断对象是否为空,且对象的所有属性都为空
     * ps: boolean类型会有默认值false 判断结果不会为null 会影响判断结果
     *     序列化的默认值也会影响判断结果
     * @param object
     * @return
     */
    public static  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;
    }

}

以上代码运行一下,可以得出以下结果。

Java中利用反射去判断一个对象所有属性是否都为空 _ JavaClub全栈架构师技术笔记

然后可以尝试随便给个属性赋值,这个方法都会校验出来这个对象的属性的值是否为空,但是也有特殊情况,下面我们就来分析一下都有哪些情况

PS:注意注意,敲黑板了。都坐好了、

第一种情况:对象中存在基本数据类型的时候,需要把基本数据类型转成相应的包装类型,即装箱操作

举个例子:对象中存在boolean属性的时候,由于boolean默认值是false,所以会导致方法判断对象都不为空,

Java中利用反射去判断一个对象所有属性是否都为空 _ JavaClub全栈架构师技术笔记

方法判断该对象都不是空的,

Java中利用反射去判断一个对象所有属性是否都为空 _ JavaClub全栈架构师技术笔记

针对着这种情况我们可以使用Boolean来替换掉boolean就好了

Java中利用反射去判断一个对象所有属性是否都为空 _ JavaClub全栈架构师技术笔记

可以看到改成包装类之后,已经可以了

Java中利用反射去判断一个对象所有属性是否都为空 _ JavaClub全栈架构师技术笔记

这边顺便说下8中基本数据类型中的默认值

byte: 0

short:    0

int :       0

long:     0L

float:     0.0f

double: 0.0d

char:    \u0000(空, ")

boolean: false

 

 

 

作者:这辈子_安静的努力着
来源链接:https://blog.csdn.net/qq_35868412/article/details/107959686

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/42001.html

分享给朋友:

“Java中利用反射去判断一个对象所有属性是否都为空” 的相关文章

Java日志框架那些事儿

Java日志框架那些事儿

在项目开发过程中,我们可以通过 debug 查找问题。而在线上环境我们查找问题只能通过打印日志的方式查找问题。因此对于一个项目而言,日志记录是一个非常重要的问题。因此,如何选择一个合适的日志记录框架也非常重要。在Java开发中,常用的日志记录框架有JDKLog、Log4J、LogBack、SLF4J...

JDBC连接时所犯错误1.字符集设置不合适2.连接MySQL8.0社区版时时区不一致3..包名不能以Java.命名4.驱动被弃用

Microsoft JDBC Driver 的主页为:https://msdn.microsoft.com/en-us/data/aa937724.aspx 下载所需驱动 今天连接时报了四次错,记录下来 1.java.sql.SQLException:...

Java实现阶乘运算

n!=123*…n 学习编程就是要了解从问题到程序是如何实现的 Scanner in=new Scanner(System.in); int n ; n=in.nextInt(); // int i=1; int factor=1;...

Java 基础:hashCode方法

Java 基础:hashCode方法

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 一、前言     泥瓦匠最近被项目搞的天昏地暗。发现有些要给自己一些目标,关于技术的目标: 专注...

我对java String的理解 及 源码浅析

我对java String的理解 及 源码浅析

摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 每天起床告诉自己,自己的目标是 ”技术 + 英语 还有生活“! -泥沙砖瓦浆木匠 一...

初探设计:Java继承何时用?怎么用?

初探设计:Java继承何时用?怎么用?

Writer      :BYSocket(泥沙砖瓦浆木匠) 一、回顾继承 常见的如下: 1、依赖(”uses-a“) 2、聚合(”has-a“) 3、继承(”is-a“)类...

深入浅出: Java回调机制(异步)

Writer      :BYSocket(泥沙砖瓦浆木匠) 什么是回调?今天傻傻地截了张图问了下,然后被陈大牛回答道“就一个回调…”。此时千万个草泥马飞奔而过(逃 哈哈,看着源码,享受着这种回调在代码上的作用,...

Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较

Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 上一篇总结了下ArrayList 、LinkedList和Vector比较,今天泥瓦匠总结下Hash 、LinkedList和Vector比较。其实大家都是...

Java实现ModbusTCP通信

Java实现ModbusTCP通信

使用ModbusTCP实现和硬件设备通信 有问题可以私信和评论,看到会回复。 一个项目,需要用Java实现使用ModbusTCP和硬件设备通信 视频地址:https://www.bilibili.com/video/BV1cz4y1R7cg...

java提高篇(二五)

java提高篇(二五)

      在java中与有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值。一个...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。