龙目岛建筑商的遗产

我试图在我的项目中使用龙目岛。

我有一个A类:

@Data
@Builder
public class A {
    Integer a1;
}

和 B 类:

@Data
public class B extends A {
    Integer b1;

    @Builder
    public B(Integer b1, Integer a1) {
        super(a1);
        this.b1 = b1;
    }
}

我收到一个错误,说B中的builder()不能覆盖A中的builder(),因为BBuilder中的返回类型与ABuilder中的返回类型不兼容。

有没有办法使用龙目岛做到这一点?我不想为B编写完整的构建器,除非我没有任何其他选择。

PS:由于问题,我已经为B类提供了显式构造函数。我尝试搜索,但我找不到一个好的解决方案。


答案 1

在这里,我们只需要调用超级构建器即可。

@Data
public class B extends A {
    Integer b1;

    @Builder
    public B(Integer b1, Integer a1) {
        super(a1);
        this.b1 = b1;
    }

    public static class BBuilder extends ABuilder{
            BBuilder() {
                super();
            }
    }
}

答案 2

如果您将龙目岛 1.18.4 与 IntelliJ 一起使用,则以下代码将适用于您:

@Data
@Builder
class A {
    Integer a1;
}

@Data
class B extends A {
    Integer b1;

    @Builder (builderMethodName = "BBuilder")
    public B(Integer b1, Integer a1) {
        super(a1);
        this.b1 = b1;
    }
}

public class Main {

    public static void main(String[] args){
    System.out.println(B.BBuilder().a1(1).b1(1).build());

    }
}

顺便说一句,在撰写此答案时,@SuperBuilder注释在IntelliJ中不起作用。如果您有多个级别的继承,请避免龙目岛,否则它会使您的Java模型混乱。


推荐