统计一个实体类及其父类、子类中所有空字段
使用反射:利用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... } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!