Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lombok builder模式问题_Java_Lombok - Fatal编程技术网

Java Lombok builder模式问题

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

我在STS(eclipse)中添加了Lombok的JAR文件。 我正在使用Lombok使用
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上也不起作用。无论如何,这甚至不稳定。我不能用它来生产