java - 在带有父类(super class)的 Lombok 构建器中使用自定义 setter

标签 java lombok

我想在 Lombok 的构建器中使用自定义 setter 并覆盖 1 个方法,就像这样

@SuperBuilder
public class User implements Employee {
    private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();

    private String username;

    private String password;

    public static class UserBuilder {
        public UserBuilder password(String password) {
            this.password = ENCODER.encode(password);
            return this;
        }
    }
}

但我有这个编译错误
Existing Builder must be an abstract static inner class.

最佳答案

对比@Builder , @SuperBuilder生成两个构建器类,一个 public和一个 private一。两者都加载了大量的泛型以确保正确的类型推断。

如果你想在builder类中添加或修改一个方法,你应该看看未定制的delombok编辑代码并复制并粘贴 public abstract static class从那里头。否则,您可能会弄错泛型,从而导致您无法修复的编译器错误。也看看 return生成的方法的类型和语句,以确保您正确定义。

@SuperBuilder documentation还提到了这一点:

Due to the heavy generics usage, we strongly advice to copy the builder class definition header from the uncustomized delomboked code.



在您的情况下,您必须按如下方式自定义构建器:
public static abstract class UserBuilder<C extends User, B extends User.UserBuilder<C, B>> {
    public B password(final int password) {
        this.password = ENCODER.encode(password);
        return self();
    }
}

关于java - 在带有父类(super class)的 Lombok 构建器中使用自定义 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60621379/

相关文章:

java - 在数组中查找缺失值时无法理解 `XOR` 背后的逻辑

java - 从 freemarker 列表中获取最后一条记录

java - 如何在方法上使用 Lombok @Builder 注释

java - Netbeans:如何创建包含所有库和资源文件的可执行 .jar 文件?

java - 将类作为参数传递给java中的方法

java - 知道为什么这个请求在curl 中有效而不是在java 中吗?

java - Eclipse 无法识别 Lomboks 构造函数注入(inject)

java - 使用 lombok 无法很好地编译

java - 似乎无法让 Lombok 在单元测试中工作

java - lombok AllArgsConstructor 注释中是否包含静态变量?