Java Lombok builder模式问题
我在STS(eclipse)中添加了Lombok的JAR文件。 我正在使用Lombok使用Java Lombok builder模式问题,java,lombok,Java,Lombok,我在STS(eclipse)中添加了Lombok的JAR文件。 我正在使用Lombok使用builder()创建对象。但是,我面临着继承的问题。 如果我使用Lombok的builder模式来创建对象,那么它将在工作区中工作&在可执行的JAR文件中。 但是,如果我使用Lombok的builder模式来创建与另一个对象不同的对象,那么它就不起作用了 @Data @Builder @AllArgsConstructor @NoArgsConstructor class BaseEmp { pr
builder()
创建对象。但是,我面临着继承的问题。
如果我使用Lombok的builder模式来创建对象,那么它将在工作区中工作&在可执行的JAR文件中。
但是,如果我使用Lombok的builder模式来创建与另一个对象不同的对象,那么它就不起作用了
@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中工作
但是,当我在workspace和JAR中转换为普通对象创建时,它在这两个地方都可以工作
这意味着,在编译时,Lombok处理器会以某种方式丢失继承类字段。如果扩展另一个类,您应该真正考虑使用
@SuperBuilder
。尽管它仍处于试验阶段,但Lombok维护人员明确表示,这主要是因为它是一个非常年轻、极其复杂的功能,无法像核心功能那样快速获得支持/错误修复。@SuperBuilder
不太可能在将来重新设计或删除
但是,如果要坚持使用@Builder
,则类和构造函数上都不能有@Builder
注释。只要把它放在构造器上,它就会工作
此外,您的超类也不应该有
@Builder
,否则您将在Builder()
方法上遇到名称冲突。(您可以通过使用参数builderMethodName
对其进行重命名来解决此问题)如果扩展另一个类,您应该考虑使用@SuperBuilder
。尽管它仍处于试验阶段,但Lombok维护人员明确表示,这主要是因为它是一个非常年轻、极其复杂的功能,无法像核心功能那样快速获得支持/错误修复。@SuperBuilder
不太可能在将来重新设计或删除
但是,如果要坚持使用@Builder
,则类和构造函数上都不能有@Builder
注释。只要把它放在构造器上,它就会工作
此外,您的超类也不应该有
@Builder
,否则您将在Builder()
方法上遇到名称冲突。(您可以通过使用参数builderMethodName
对其进行重命名来解决此问题)如果要创建具有继承性的生成器,您需要使用@SuperBuilder
。我尝试了SuperBuilder(处于测试阶段)和super类所有参数构造函数的生成器。SuperBuilder在STS eclipse上也不起作用。无论如何,这甚至不稳定。我无法将其用于生产如果要创建具有继承性的生成器,则需要使用@SuperBuilder
。我尝试了SuperBuilder(处于测试阶段)和super类所有参数构造函数的生成器。SuperBuilder在STS eclipse上也不起作用。无论如何,这甚至不稳定。我不能用它来生产