【发布时间】:2019-11-01 07:59:09
【问题描述】:
我在 STS (eclipse) 中添加了 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 处理器不知何故错过了继承类字段。
【问题讨论】:
-
如果要创建具有继承性的构建器,则需要使用
@SuperBuilder。 -
我尝试了 SuperBuilder(处于测试阶段)和超级类所有参数构造函数的 Builder。
-
SuperBuilder 也不适用于 STS eclipse。无论如何,这甚至都不稳定。我不能将其用于生产