统计一个实体类及其父类、子类中所有空字段

使用反射:利用Java反射机制来获取类的所有字段,并检查这些字段是否为空。
递归遍历:如果需要同时考虑父类和子类,可以通过递归的方式遍历整个继承链。
处理访问限制:确保能够访问私有字段,可能需要调用setAccessible(true)方法。
下面是一个简单的示例代码,演示如何实现这个功能。假设我们有一个基类BaseEntity以及它的子类ChildEntity,并且你想统计这两个类中的空字段数量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
 
public class FieldNullCounter {
 
    public static int countNullFields(Object obj) throws IllegalAccessException {
        // 获取对象的实际类型
        Class<?> clazz = obj.getClass();
        // 用于存储所有字段
        List<Field> allFields = new ArrayList<>();
         
        // 收集当前类及其所有父类的字段
        while (clazz != null) {
            for (Field field : clazz.getDeclaredFields()) {
                allFields.add(field);
            }
            clazz = clazz.getSuperclass(); // 移动到父类
        }
 
        // 统计空字段数量
        int nullCount = 0;
        for (Field field : allFields) {
            field.setAccessible(true); // 设置可访问性
            if (field.get(obj) == null) {
                nullCount++;
            }
        }
 
        return nullCount;
    }
 
    public static void main(String[] args) throws IllegalAccessException {
        BaseEntity base = new BaseEntity();
        ChildEntity child = new ChildEntity();
 
        System.out.println("BaseEntity null fields: " + countNullFields(base));
        System.out.println("ChildEntity null fields: " + countNullFields(child));
    }
}
 
class BaseEntity {
    private String name;
    private Integer age;
 
    // getters and setters...
}
 
class ChildEntity extends BaseEntity {
    private String address;
 
    // getters and setters...
}

  

posted @   红尘沙漏  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示