java中object类不提供属性判空与过滤功能,需通过反射、apache commons lang、自定义注解或jackson objectmapper等方案实现,各适用于不同场景。

Java 中 Object 类本身**不提供**对象属性判空与过滤功能。它只有基础方法(如 toString()、equals()、hashCode()),无法自动遍历字段或判断属性是否为空。要实现通用的属性判空与过滤,需借助反射、第三方库或自定义工具类。
用反射遍历字段判空
通过 Class.getDeclaredFields() 获取所有声明字段(含私有),配合 Field.setAccessible(true) 读取值,再根据类型判断是否为空:
-
基本类型(如
int、boolean)默认不为null,可跳过或按业务约定处理(如int = 0视为空) -
引用类型(如
String、List、自定义对象)检查是否为null;String还可进一步用StringUtils.isBlank()判空串 -
集合/数组 用
Collection.isEmpty()或Array.getLength()判断是否为空
使用 Apache Commons Lang 简化操作
引入 commons-lang3 后,可用 FieldUtils + ObjectUtils 快速实现:
-
FieldUtils.getAllFields(obj.getClass())获取全部字段(含父类) -
Field.get(obj)取值后,用ObjectUtils.isEmpty()统一判断(对null、空字符串、空集合、空数组均返回true) - 封装成工具方法,支持传入忽略字段列表(如
id、createTime)
结合 Lombok 与自定义注解增强可控性
为避免反射误判或过滤敏感字段,可定义注解控制行为:
- 添加
@IgnoreOnFilter注解到不参与判空的字段(如主键、状态码) - 在反射逻辑中跳过带该注解的字段
- Lombok 的
@Data/@Getter减少样板代码,让实体更干净
推荐:用 Jackson 的 ObjectMapper 做 JSON 层过滤
若目标是序列化前剔除空属性,比手动反射更安全高效:
- 配置
ObjectMapper:mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);(忽略null字段) 或JsonInclude.Include.NON_EMPTY(同时忽略空字符串、空集合) - 适用于 API 返回、日志脱敏等场景,无需修改业务对象逻辑
- 注意:仅影响 JSON 输出,不改变原对象状态
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











