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来定义对象引用,
-
判空方式
网上有通过反射:https://www.cnblogs.com/wangflower/p/12258987.html
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()方法
以上两种方式都不能检验出空对象