龙目岛@Builder是否允许延长

2022-09-03 07:05:26

我有2个班级:

import lombok.Builder;
@Builder
public class B extends A {
}

import lombok.Builder;
@Builder
public class A {
}

在我收到消息上:@BuilderB

返回类型与 A.builder() 不兼容。

这是龙目岛的局限性吗?还是我做错了什么?

如果我不关闭 ,则构建器 on 似乎不会考虑 构造函数中的字段。@BuilderABAB


答案 1

最新的龙目岛版本1.18.2包括新的实验@SuperBuilder。它支持来自超类(也是抽象类)的继承和字段。唯一的要求是所有超类都必须具有注释。有了它,解决方案就这么简单:@SuperBuilder

@SuperBuilder
public class B extends A {
   private String b;
}

@SuperBuilder
public class A {
    private String a;
}

B instance = B.builder().b("b").a("a").build();

答案 2

只有通过解决方法才能实现(请参阅#78)

来自 Reinhard.codes

我们一直在类本身上使用@Builder,但您也可以将其放在类的构造函数或静态方法上。在这种情况下,龙目岛将在构造函数/方法的每个参数的生成器类上创建一个 setter 方法。这意味着您可以创建自定义构造函数,其中包含类的所有字段(包括其超类)的参数。

@AllArgsConstructor
public class Parent {
  private String a;
}

public class Child extends Parent {

  private String b;

  @Builder
  private Child(String a, String b){
    super(a);
    this.b = b;
  }
}

推荐