我想在 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/