Java部分

java中new空对象判断

2020-07-02  本文已影响0人  Geroge1226

背景

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

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()方法
以上两种方式都不能检验出空对象

上一篇下一篇

猜你喜欢

热点阅读