美文网首页Java部分
java中new空对象判断

java中new空对象判断

作者: Geroge1226 | 来源:发表于2020-07-02 13:25 被阅读0次

背景

程序中会接收上游传入的对象参数,而我们会对对象参数做判空处理。比如:

public boolean checkSendConditon(SportFintessSignTotal total){
        if(total == null){
            log.info("会员卡第一次赠送");
            return true;
        }
        ...

这其中会存在问题,上游如果是new对象形式传入的空对象,此时并不会走"log.info"内容。

解决方案

  • 原因

SportFintessSignTotal total = new SportFintessSignTotal();
new是java创建对象的方式,会在堆内存中分配对象空间,受GC管理,此时对象中的属性值为空,但对象说明

SportFintessSignTotal total = null;
使用null来定义对象引用,

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Field;
import java.util.Collection;

/**
 * 判断对象实体的属性是否为空
 */
public class ObjectNullUtil {
    private final static Logger LOGGER = LoggerFactory.getLogger(ObjectNullUtil.class);

    public static boolean objectIsNull(Object obj) {
        if (obj == null) {
            return true;
        }
        //获取所有属性
        Field[] fields = obj.getClass().getDeclaredFields();
        if (fields == null || fields.length == 0) {
            return true;
        }
        boolean flag = true;
        for (Field field : fields) {
            //不检查,设置可访问
            field.setAccessible(true);
            try {
                if (field.get(obj) instanceof Collection) {
                    if (isNotNull((Collection) field.get(obj))) {
                        flag = false;
                        break;
                    }
                } else {
                    if (isNotNull(field.get(obj))) {
                        flag = false;
                        break;
                    }
                }
            } catch (Exception e) {
                LOGGER.error("ObjectNullUtil.objectIsNull校验异常", e);
                flag = false;
            }
        }
        return flag;
    }

    public final static boolean isNull(Object obj) {
        if (obj == null || isNull(obj.toString())) {
            return true;
        }
        return false;
    }

    public final static boolean isNull(Collection collection) {
        if (collection == null || collection.size() == 0)
            return true;
        return false;
    }

    public final static boolean isNull(String str) {
        return str == null || "".equals(str.trim())
                || "null".equals(str.toLowerCase());
    }

    public final static boolean isNotNull(Collection collection) {
        return !isNull(collection);
    }

    public final static boolean isNotNull(Object obj) {
        return !isNull(obj);
    }
}

说明:
1、org.apache.commons.lang3;包中的ObjectUtils工具类allNotNull()
2、springboot项目中的ObjectUtils类中isEmpty()方法
以上两种方式都不能检验出空对象

相关文章

  • java中new空对象判断

    背景 程序中会接收上游传入的对象参数,而我们会对对象参数做判空处理。比如: 这其中会存在问题,上游如果是new对象...

  • 总结java中判断对象是否为空的方法

    总结java中判断对象是否为空的方法 我们想要判断对象是否为空,像基本类型那样判断是不可以的, ==={} ?这样...

  • Java对象头和对象组成参考

    补充1:JVM中new一个Java空对象最少需要3个字长,引用1个字长,对象头2个字长;补充2:JVM中new一个...

  • 关于js中一个逻辑判断引发的问题

    在java中如果如果空引用 空对象 当做判断的话 直接扔出个 空指针, 代码无法继续执行 在js中,很常见看到...

  • 判断List集合为空或null

    判断List集合是否为空 Java中,判断List集合是否为空与是否为null并不相同 新建List对象,默认是为...

  • js中判断空对象{}

    实际开发中碰到一种数据格式: 一般后端返回的数据格式都是这种: 所以,就出现需要判断返回对象是否为空对象的时候。 ...

  • Kotlin学习笔记-数据类型 可空类型相关操作符(4)

    在java中为了防止对象为空时出现的错误,通常会在代码中加入非空判断 kotlin中 不可空类型的变量一定不会是n...

  • java 一个空对象占多少字节

    Object o = new Object():在32位系统下:java空对象占8个字节,对象的引用占4个字节。所...

  • Kotlin中clone方法

    java中创建对象的方式:new关键字 clone 反射 反序列化 1 new 创建对象 执行语句var pers...

  • Java堆、栈和方法区

    堆: 堆主要存放Java在运行过程中new出来的对象,凡是通过new生成的对象都存放在堆中,对于堆中的对象生命周期...

网友评论

    本文标题:java中new空对象判断

    本文链接:https://www.haomeiwen.com/subject/jkvlqktx.html