给你一个对象,如果需要统计对象中属性不为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集合的值即可。甚至我们还可以把这个值对应的字符串放入数据库,改成动态获取的方式。


求平安
15 声望0 粉丝

家人平平安安。