如何重写Lombok默认Builder方法?代码尝试无效求解答
解决Lombok Builder方法重写不生效的问题
你的代码无法生效的核心原因是:Lombok默认生成的Builder类名为ABuilder,而你自定义的是Builder,两者不是同一个类,导致自定义方法不会被调用。以下是两种可行的实现方式:
方式一:指定Builder类名匹配自定义类
通过@Builder(builderClassName = "Builder")让Lombok生成的Builder类名与自定义类一致,Lombok会自动合并自定义方法和生成的代码:
@Data @Builder(builderClassName = "Builder") static class A { private int a; public static class Builder { public Builder a(int x) { this.a = 2 * x; return this; } } } private static void fun() { var a = A.builder() .a(1) .build(); System.out.println(a.getA()); // 输出2,符合预期 }
方式二:直接匹配Lombok默认的Builder类名
Lombok默认生成的内部Builder类是ABuilder,直接针对这个类编写自定义方法即可,Lombok会优先使用自定义方法:
@Data @Builder static class A { private int a; public static class ABuilder { public ABuilder a(int x) { this.a = 2 * x; return this; } } } private static void fun() { var a = A.builder() .a(1) .build(); System.out.println(a.getA()); // 输出2 }
注意事项
- 自定义方法的访问修饰符要保持
public,和Lombok生成的方法一致,否则外部无法调用。 - 方法名必须和字段名完全匹配(这里是
a),才能覆盖Lombok生成的默认赋值方法。
内容的提问来源于stack exchange,提问作者Stepan Kryzhankov
相关产品推荐
相关产品推荐

