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