Lombok 的 @Getter 和 @Setter 在泛型类中完全支持,基于字段类型和命名规则生成方法(如 private T value → getValue()/setValue(T)),boolean 字段仍用 is 前缀,泛型擦除不影响编译期 AST 处理,但 @NonNull 不自动校验 setter 参数,需显式配置。

在泛型类上使用 Lombok 的 @Getter 和 @Setter 是完全支持的,但需注意几个关键细节——它们不因泛型参数而失效,但生成逻辑仍严格遵循字段类型和命名规则,且泛型擦除不影响编译期代码生成。
泛型类中字段的 getter/setter 生成不受影响
Lombok 在编译期通过 AST(抽象语法树)处理源码,不依赖运行时类型信息。因此,无论类声明为 class Box 还是 class Result,只要字段本身是普通类型(如 private T data; 或 private List),@Getter/@Setter 就会照常生成对应方法。
- 字段
private T value;→ 生成public T getValue()和public void setValue(T value) - 字段
private List list;→ 生成public List getList()和public void setList(List list) - 泛型参数
T、U会原样保留在方法签名中,Lombok 不做推断或替换
boolean 字段在泛型类中仍遵循 is-前缀规则
即使泛型类里定义了 private boolean isActive;,getter 仍为 isActive();若字段名以 is 开头(如 private boolean isReady;),getter 仍是 isReady(),不会变成 isisReady()。该规则与是否泛型无关,只取决于字段类型(boolean 基本类型)和命名习惯。
注意:Boolean 包装类字段(如 private Boolean enabled;)的 getter 始终为 getEnabled(),不走 is 前缀逻辑。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
泛型字段不能用 @NonNull 自动校验入参(需手动处理)
@Setter 默认不为泛型参数添加空值检查。即使你写了 private @NonNull T item;,Lombok 不会在 setItem(T item) 中插入非空判断——因为 @NonNull 字段上的注解默认只作用于字段本身,而 @Setter 生成的参数不会自动继承该约束。
若需校验,必须显式配置:
- 方式一:在字段上加
@Setter(onParam = @__({@NonNull})) - 方式二:改用
@RequiredArgsConstructor+@NonNull构造器参数(更推荐,语义清晰)
泛型类上慎用 @Data 或全局 @Getter/@Setter
@Data 相当于 @Getter @Setter @ToString @EqualsAndHashCode @RequiredArgsConstructor 的组合。在泛型类中启用它,可能带来两个隐患:
-
toString()和equals()默认基于字段值比较,若字段含泛型集合(如List),行为正常;但若含自定义泛型对象且未重写equals,结果可能不符合预期 - 静态字段、
final字段不会被@Setter处理,这点在泛型类中同样适用,但容易被忽略 - 建议拆解使用:明确需要哪些能力,比如只用
@Getter @Setter,避免@Data带来的隐式契约
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










