@Data 自动生成非静态字段的getter、setter、toString、equals和hashCode方法,但static或final字段不生成setter,final字段仅生成getter,且需确保Lombok插件启用、依赖正确及注解处理器开启。

@Data 是 Lombok 提供的一个复合注解,它会自动为类中所有非静态字段生成 getter、setter、toString、equals 和 hashCode 方法。要让它正确生成 getter 和 setter,关键在于满足几个基本条件。
确保字段不是 static 或 final
Lombok 默认不会为 static 字段或 final 字段生成 setter(final 字段也无法被 setter 修改),getter 也只对 non-static 字段生效。如果字段声明为 private final String name;,Lombok 会生成 getter,但不生成 setter;如果是 static int count;,则 getter 和 setter 都不会生成。
- ✅ 正确写法:private String name; → 自动生成 getName() 和 setName()
- ❌ 不会生成 setter:private final String id;(只生成 getId())
- ❌ 完全跳过:private static String version;
确认 Lombok 已正确集成到项目中
仅添加依赖还不够,IDE 和编译器都需要支持 Lombok 的注解处理。常见问题包括:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- IDEA 中未安装 Lombok 插件,或插件未启用:需在 Settings → Plugins 中搜索并启用 Lombok
- Maven 依赖未声明或版本不匹配:确保 pom.xml 包含 lombok 依赖且 scope 是 compile(非 provided)
- 未开启注解处理器:IntelliJ 需勾选 Settings → Build → Compiler → Annotation Processors → Enable annotation processing
注意访问修饰符和字段可见性
@Data 生成的 getter/setter 方法默认是 public 的,且只作用于当前类可访问的字段(即 private、package-private、protected 字段都会被处理)。但它不会处理父类字段,也不会为私有内部类字段“越界”生成。
立即学习“Java免费学习笔记(深入)”;
- 子类继承的字段不会被子类的 @Data 处理(需在子类中显式声明字段)
- 若字段是 private 但所在类是 package-private,生成的 getter/setter 仍是 public,不影响调用
- 字段名遵循 JavaBean 规范(如 private boolean active; → getActive(),不是 isActive()?错,其实是 isActive()!Lombok 对 boolean 类型字段优先生成 isXxx(),除非字段名以 is 开头)
需要定制 getter/setter 时可配合其他注解
@Data 是“一键全包”,但有时你只想生成部分方法,或修改行为。这时可以拆解使用更细粒度的注解:
- 用 @Getter + @Setter 替代 @Data,更灵活(比如只加 @Getter,不加 @Setter)
- 给特定字段加 @Getter(onMethod_ = @Override) 可覆盖生成逻辑
- 用 @Setter(AccessLevel.PROTECTED) 控制生成 setter 的访问级别
- 用 @Accessors(fluent = true) 让 setter 返回 this,支持链式调用(如 user.setName("Tom").setAge(25))

















