Object obj1 = null;
log.info(Objects.isNull(obj1));
Object obj2 = new Object();
log.info(Objects.isNull(obj2));
第一个是true
第二个是false
因为Objects工具类的判空只是判断对象是否为空,而第二种对象是已经开辟了堆内存,而里面的属性都是空的,该方法无法识别,因此自己写了个方法优化
工具方法:
@Slf4j
public class ObjectUtils {
/**
* 判断对象是否完全为空
*
* @param object
* @return
*/
public static boolean objectCheckIsNull(Object object) {
boolean flag = true; //定义返回结果,默认为true
if (Objects.isNull(object)) {
flag = true;
} else {
Class clazz = (Class) object.getClass(); // 得到类对象
Field fields[] = clazz.getDeclaredFields(); // 得到所有属性
for (Field field : fields) {
field.setAccessible(true);
Object fieldValue = null;
try {
fieldValue = field.get(object); //得到属性值
Type fieldType = field.getGenericType();//得到属性类型
String fieldName = field.getName(); // 得到属性名
log.info("属性类型:" + fieldType + ",属性名:" + fieldName + ",属性值:" + fieldValue);
} catch (IllegalArgumentException e) {
log.error(e.getMessage(), e);
} catch (IllegalAccessException e) {
log.error(e.getMessage(), e);
}
if (fieldValue != null) { //只要有一个属性值不为null 就返回false 表示对象不为null
flag = false;
break;
}
}
}
return flag;
}
}
博客介绍了Java中Objects工具类的局限性,即它只能判断对象是否为空,但无法检查对象内部属性是否为空。作者提供了一个自定义的`ObjectUtils.objectCheckIsNull()`方法,该方法遍历对象的所有属性,检查每个属性的值是否为空。如果所有属性都为空,则返回true,表示对象完全为空;否则返回false。这个工具方法可以用于更全面的对象判空场景。
700

被折叠的 条评论
为什么被折叠?



