java new 失败判断_java中new空对象判断

背景

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

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()方法

以上两种方式都不能检验出空对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值