java – 如何在Lombok构建器中的构造函数之后运行代码

前端之家收集整理的这篇文章主要介绍了java – 如何在Lombok构建器中的构造函数之后运行代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个类,我想使用Lombok.Builder,我需要预处理一些参数.像这样的东西:
@Builder
public class Foo {
   public String val1;
   public int val2;
   public List<String> listValues;

   public void init(){
       // do some checks with the values.
   }
}

通常我会在NoArg构造函数调用init(),但是使用生成的构建器我无法这样做.有没有办法让生成的构建器调用此init?例如,build()将生成如下代码

public Foo build() {
   Foo foo = Foo(params....)
   foo.init();
   return foo;
}

我知道我可以手动编写所有args构造函数,Builder将通过它调用它,我可以在那里调用init.

但这是次优解决方案,因为我的类可能偶尔会添加新字段,这也意味着更改构造函数.

解决方法

经过多次试验和结束错误后,我找到了一个合适的解决方案:扩展生成构建器并自己调用init().

例:

@Builder(toBuilder = true,builderClassName = "FooInternalBuilder",builderMethodName = "internalBuilder")
public class Foo {

   public String val1;
   public int val2;
   @Singular public List<String> listValues;

   void init() {
      // perform values initialisation
   }

   public static Builder builder() {
      return new Builder();
   }

   public static class Builder extends FooInternalBuilder {

      Builder() {
         super();
      }

      @Override public Foo build() {
         Foo foo = super.build();
         foo.init();
         return foo;
      }
   }
}

猜你在找的Java相关文章