我想在 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)
与 相比@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)
| 归档时间: |
|
| 查看次数: |
2466 次 |
| 最近记录: |