我有两个这样的类(class):
@Builder
public class Parent {
final int a;
final int b;
public class static ParentBuilder {
public ParentBuilder setAllTo(final int value) {
return a(value).b(value);
}
}
}
public class Child extends Parent {
final in c;
@Builder(builderMethodName = "childBuilder")
public Child(final int a, final int b, final int c) {
super(a, b);
this.c = c;
}
}
我的类(class)正在成长,并且有越来越多的领域。
这是使用
@SuperBuilder
的原因。但是,如何添加定制的构建器方法?剂量工作的方式相同。我尝试过这种方式:
@SuperBuilder
public abstract class Parent { //yes, I want a abstract parent
final int a;
final int b;
public class static ParentBuilder {
public ParentBuilder setAllTo(final int value) {
return a(value).b(value);
}
}
}
@SuperBuilder
public class Child extends Parent {
final in c;
}
编辑
这还不可能。当我尝试以相同的方式进行操作时,出现了一个异常:
@SuperBuilder does not support customized builders. Use @Builder instead.
覆盖是一个内部类,如下所示:public abstract static class ParentBuilder<C extends ParentBuilder, B extends Parent.ParentBuilder<C, B>> {
// custom imlementations here
}
最佳答案
我最近尝试使用Lombok 1.18.8和IntelliJ自定义@SuperBuilder
,并且效果很好。我遇到的唯一问题是,我失去了在SuperBuilder-toBuilder
中使用@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();
}
}
我在这里添加了我的工作代码:Customize SuperBuilder in Lombok