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