给你一个对象,如果须要统计对象中属性不为 null 的个数。第一种形式是,判断对象的每个属性是否为 null,如果对象有 1000 个值,那就须要写 1000 个循环了,这样的话代码是非常臃肿的。另外,如果 1000 字段中我只须要关注其中 600 个值的填写状况,或者字段有新增或者删除,改变量还是有的。有没有个一个方法,能够定义一个字段名的汇合,在汇合之内的字段,咱们关注填写状况,不在汇合之内的字段,咱们就不关注字段的填写状况了。
那就是用反射了,把类的全副字段映射成一个汇合,而后遍历汇合,筛选出咱们关注的汇合,而后通过反射获取字段的值,判断是否为 null。
List<String> countColumns = Arrays.asList("aColumn","bColumn","cColumn");
for (Field declaredField : Person.class.getDeclaredFields()) {
try {if (countColumns.contains(declaredField.getName())) {declaredField.setAccessible(true);
Object obj = declaredField.get(agentCustomer);
if (Objects.nonNull(obj) && StringUtils.isNotEmpty(String.valueOf(obj))) {count++;}
}
} catch (IllegalAccessException e) {log.info("initCustomerDetailCount:{}", e);
}
}
如果咱们须要减少或者删除字段的时候,只须要批改 countColumns 汇合的值即可。甚至咱们还能够把这个值对应的字符串放入数据库,改成动静获取的形式。