给你一个对象,如果需要统计对象中属性不为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集合的值即可。甚至我们还可以把这个值对应的字符串放入数据库,改成动态获取的方式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。