【问题标题】:Use custom setter in Lombok's builder with superclass在 Lombok 的构建器中使用自定义设置器和超类
【发布时间】:2023-03-29 10:45:01
【问题描述】:

我想在 Lombok 的 builder 中使用自定义 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.

【问题讨论】:

    标签: java lombok


    【解决方案1】:

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

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

    @SuperBuilder documentation 也提到了这一点:

    由于大量使用泛型,我们强烈建议从未自定义的 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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      相关资源
      最近更新 更多