2 回答
TA贡献1804条经验 获得超8个赞
我最近尝试@SuperBuilder使用 Lombok 1.18.8 和 IntelliJ 进行自定义,效果很好。我面临的唯一问题是,我无法toBuilder在 SuperBuilder - 中使用标志@SuperBuilder(toBuilder=true)。
下面是覆盖@SuperBuilder 方法的代码。
public static abstract class ChildBuilder<C extends Child, B extends ChildBuilder<C, B>>
extends ParentBuilder<C, B> {
private LocalDate date;
public B date(String dateStr) {
this.date = LocalDate.parse(dateStr);
return self();
}
}
TA贡献1827条经验 获得超8个赞
当@SuperBuilder在1.18.2介绍,自定义这是不可能的。如果您尝试,Lombok 1.18.2 会为您提供错误消息SuperBuilder does not support customized builders.
但是,Lombok 1.18.4 添加了有限的@SuperBuilder. (这是有限的,因为你不能修改setter方法,但你可以添加自己的方法并修改build()和builder()。)
生成的@SuperBuilder代码相当复杂,与@Builder. 为避免意外弄乱加载泛型的构建器代码,您应该首先从 delombok 输出中复制构建器类标头。在您的情况下(添加新的 setter 方法),自定义抽象构建器类ParentBuilder(而不是ParentBuilderImpl)。查看 delomboked 代码以了解应如何定义 setter,尤其是返回类型。
这是您示例的自定义构建器代码:
public abstract static class ParentBuilder<C extends Parent, B extends ParentBuilder<C, B>> {
public B setAllTo(final int value) {
return a(value).b(value);
}
}
使用 Lombok 1.18.4,它可以编译并按预期工作。
添加回答
举报