龙目岛的@ Builder / @ AllArgsConstructor如何调用自定义构造函数?

时间:2018-09-27 14:00:10

标签: java constructor lombok

我有一个自定义的无参数构造函数,我希望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构造函数的编写和维护变得很乏味。

还有另一种方法可以实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

您可以定义一个几乎为空的嵌套

class BuilderExampleBuilder {
    public BuilderExample build() {
        BuilderExample result = new ...all the stuff Lombok does
        result.setSome(thing);
        return result;
    }
}

但这有一些问题:

  • all-args-constructor冗长且容易忘记新字段。
  • 呼叫result.setSome(thing)不能使用super关键字。这可以通过提供类似

    的方法来解决

    private superSetSome(事物){     super.setSome(事物); }

您还可以使用非静态初始化程序块,例如

{
   super.setSome(thing);
}

这就是所有可以做的事,没有很好的解决方案。没有钩子允许将代码注入到构造器或构造器中。