关于java:java中统计属性值是否为空实现之反射

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理