在 Lombok 的构建器中使用超类的自定义设置器

San*_*Rey 6 java lombok

我想在 Lombok 的构建器中使用自定义设置器并覆盖 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我有这个编译错误

Existing Builder must be an abstract static inner class.
Run Code Online (Sandbox Code Playgroud)

Jan*_*eke 5

与 相比@Builder@SuperBuilder生成两个构建器类,apublic和 a private1。两者都大量加载了泛型以确保正确的类型推断。

如果您想向构建器类添加或修改方法,您应该查看未自定义的delombok代码并public abstract static class从那里复制并粘贴标题。否则,您可能会得到错误的泛型,从而导致无法修复的编译器错误。还要查看return生成方法的类型和语句,以确保正确定义。

文档@SuperBuilder还提到了这一点:

由于大量使用泛型,我们强烈建议从未定制的 delomboked 代码中复制构建器类定义标头。

在您的情况下,您必须按如下方式自定义构建器:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)