我在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处理器以某种方式错过了继承类字段。
答案 0 :(得分:2)
如果要扩展另一个类,则应该真正考虑使用@SuperBuilder
。尽管仍处于试验阶段,但Lombok维护者明确表示,这主要是因为它是一个非常年轻,极其复杂的功能,无法像核心功能那样快速获得支持/错误修复。 @SuperBuilder
不太可能在将来重新设计或删除。
但是,如果您想坚持使用@Builder
,则在类和构造函数上都必须没有@Builder
批注。只需将其放在构造函数上,它就可以工作。
此外,您的超类也不应包含@Builder
,否则您将在builder()
方法上遇到名称冲突。 (您可以通过使用参数builderMethodName
重命名来解决该问题。)