Java中一个对象有多个属性,工作中需要对部分属性进行“非空判断”。如果使用IFNULL会有大量的冗余代码,代码可读性差,后期维护工作量极大。
如果对象新增删除了属性,判断代码需要重新进行硬编码,此违背了SOLID中的OCP,使用IFNULL判空时弊大于利。
鉴于高效开发的情况,利用反射技术整理工具类,简化工程代码,提供工作效率。
一、测试用例:
package com.xhh.base.test;
import lombok.Data;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
@Data
public class AgentTimeHourEntity {
private String statAt;
private Integer companyId;
private Integer agentId;
private Integer workTime;
// 此处省略其他属性...
public static void main(String[] args) {
AgentTimeHourEntity agentTimeHour = new AgentTimeHourEntity();
agentTimeHour.setStatAt("2022-10-10 08:00:00");
agentTimeHour.setCompanyId(1);
agentTimeHour.setAgentId(1);
agentTimeHour.setWorkTime(1800);
// 因 WorkTime 属性有值,故输出结果为:true
System.out.println(ObjectUtil.checkObjFieldsIsNotNull(agentTimeHour, Arrays.asList("statAt", "companyId", "agentId")));
}
}
二、工具类如下:
package cn.xhh.base.util;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ObjectUtil {
/**
* 判断对象中部分属性值是否不为空
*
* @param object 对象
* @param excludeFieldNames 选择忽略校验的属性名称List集合
* @return
*/
public static boolean checkObjFieldsIsNotNull(Object object, List<String> excludeFieldNames) {
if (null == object) {
return false;
}
try {
for (Field f : object.getClass().getDeclaredFields()) {
f.setAccessible(true);
if (!excludeFieldNames.contains(f.getName()) && f.get(object) != null && StringUtils.isNotBlank(f.get(object).toString())) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
参考文章: