龙目岛建设者模式问题

时间:2019-11-01 07:59:09

标签: java lombok

我在STS(日食)中添加了Lombok的JAR文件。 我正在使用Lombok使用builder()创建对象。但是,我在继承方面面临问题。 如果我使用Lombok的生成器模式创建对象,则它可以在工作区和可执行JAR文件中工作。 但是,如果我使用Lombok的构建器模式来创建inherit另一个对象的对象,那么它将无法正常工作。

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class BaseEmp {
    private int a;
    private int b;
}


@Data
@NoArgsConstructor
@Builder
class Emp extends BaseEmp implements Serializable {

    private static final long serialVersionUID = 1L;

    @Builder
    public Emp(int a, int b) {
        super(a, b);
    }

}

Emp emp = Emp.builder.a(ipA).b(ipB).build();

在此示例中,当我打印对象时,a和b的值在JAR中为null,在STS中工作。

但是,当我转换为在工作区和JAR中创建普通对象时,在两个地方都可以正常工作。

意味着,在编译时,Lombok处理器以某种方式错过了继承类字段。

1 个答案:

答案 0 :(得分:2)

如果要扩展另一个类,则应该真正考虑使用@SuperBuilder。尽管仍处于试验阶段,但Lombok维护者明确表示,这主要是因为它是一个非常年轻,极其复杂的功能,无法像核心功能那样快速获得支持/错误修复。 @SuperBuilder不太可能在将来重新设计或删除。

但是,如果您想坚持使用@Builder,则在类和构造函数上都必须没有@Builder批注。只需将其放在构造函数上,它就可以工作。

此外,您的超类也不应包含@Builder,否则您将在builder()方法上遇到名称冲突。 (您可以通过使用参数builderMethodName重命名来解决该问题。)