在具有超类的 Lombok 构建器中使用自定义 setter
Use custom setter in Lombok's builder with superclass
我想在 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
生成两个构建器 class,一个 public
和一个 private
。两者都大量加载了泛型以确保正确的类型推断。
如果您想向构建器添加或修改方法 class,您应该查看未自定义的 delombok
ed 代码并复制并粘贴 public abstract static class
header 从那里。否则你可能会弄错泛型,导致你无法修复的编译器错误。另请查看生成方法的 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();
}
}
我想在 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
生成两个构建器 class,一个 public
和一个 private
。两者都大量加载了泛型以确保正确的类型推断。
如果您想向构建器添加或修改方法 class,您应该查看未自定义的 delombok
ed 代码并复制并粘贴 public abstract static class
header 从那里。否则你可能会弄错泛型,导致你无法修复的编译器错误。另请查看生成方法的 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();
}
}