首页 > 解决方案 > Lombok @Builder 继承 3 个类

问题描述

这可能是一个初学者问题,但我很困惑。

我有 3 个类,如下所示。在这种情况下如何使用 lombok 的 @Builder 注释。

尝试执行以下代码时,我在 C 类中遇到错误。

如果父类B类也有@Builder注释,C类会起作用吗?

我收到一个错误:- 错误:java:ClassC 中的 builder() 无法隐藏 ClassB 返回类型中的 builder() ClassCBuilder 与 ClassBBuilder 不兼容

C类:

import lombok.Builder;
public class C extends B {
    private String fieldC;

    @Builder
    public C(String fieldC, String fieldB, String fieldA) {
        super(fieldB, String fieldA);
        this.fieldC = fieldC;
    }
}

B类:

import lombok.Builder;
public class B extends A {
    private String fieldB;

    @Builder
    public B(String fieldB, String fieldA) {
        super(fieldA);
        this.fieldB = fieldB;
    }
}

A类:

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
public abstract class A {
    private String fieldA;
}

标签: javalombok

解决方案


@Builder应该class像这样添加到 not 构造函数中:

import lombok.Builder;
@Builder
public class C extends B {
    private String fieldC;

    public C(String fieldC, String fieldB, String fieldA) {
        super(fieldB, String fieldA);
        this.fieldC = fieldC;
    }
}

注释使lombok@Builder生成内部 Builder 类。添加诸如@Builder.Default字段或方法之类的东西只会修改构建器方法。请参阅 lombok@Builder描述页面中的以下示例:

import lombok.Builder;
import lombok.Singular;
import java.util.Set;

@Builder
public class BuilderExample {
    @Builder.Default private long created = System.currentTimeMillis();
    private String name;
    private int age;
    @Singular private Set<String> occupations;
}

带有注释的类@Builder将自动具有一个内部类,其名称与外部类类似,但后缀为“Builder”。然后,您可以通过调用来实例化这样的构建器:

MyClass myObject = MyClass.builder().withSomething("abc").build();

推荐阅读