繁体   English   中英

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

[英]How can Lombok's @Builder/@AllArgsConstructor invoke a custom constructor?

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

还有另一种方法可以做到这一点吗?

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

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

但这有一些问题:

  • all-args构造函数很冗长,容易忘记一个新字段。
  • 调用result.setSome(thing)不能使用super关键字。 这可以通过提供类似的方法来解决

    私人superSetSome(事物){super.setSome(事物); }

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

{
   super.setSome(thing);
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM