我有一个自定义的无参数构造函数,我希望Lombok生成的Builder可以调用它。我认为这等同于拥有一个带有所有参数的构造函数,并且首先调用这样一个自定义的无参数构造函数。
我将举例说明
@Builder
@Data
public class BuilderExample extends Foo{
private String name;
private int age;
public BuilderExample(){
super.setSome(thing);
}
}
由BuilderExample.build()
创建的实例应设置super.setSome(thing);
到目前为止,我能找到的唯一方法是编写all-args-constructor并使其调用no-args-one。我认为这与使用Lombok的构造函数和构造函数的所有想法相违背,好像字段的数量大于一或两个,all-args构造函数的编写和维护变得很乏味。
还有另一种方法可以实现这一目标吗?
答案 0 :(得分:1)
您可以定义一个几乎为空的嵌套
class BuilderExampleBuilder {
public BuilderExample build() {
BuilderExample result = new ...all the stuff Lombok does
result.setSome(thing);
return result;
}
}
但这有一些问题:
呼叫result.setSome(thing)
不能使用super
关键字。这可以通过提供类似
private superSetSome(事物){ super.setSome(事物); }
您还可以使用非静态初始化程序块,例如
{
super.setSome(thing);
}
这就是所有可以做的事,没有很好的解决方案。没有钩子允许将代码注入到构造器或构造器中。