Java Lombok@Builder继承解决方案

Java Lombok@Builder继承解决方案,java,lombok,Java,Lombok,Lombok@Builder不适用于继承用例: 比如说 class Foo{ protected int xyz1; ..... protected String xyz7; } class Bar extends Foo{ } 对于给定的用例,Lombok将无法生成方法来设置Foo类中定义的参数值 这方面的解决办法是: 手动创建条形图的构造函数 在该构造函数上放置生成器注释 有更好的解决办法吗 我将此留作参考,因为其他答案表明,现在(不是在发布此答案时)库中有一个@SuperBu

Lombok@Builder不适用于继承用例:

比如说

class Foo{
 protected int xyz1;
 .....
 protected String xyz7;
}


class Bar extends Foo{

}
对于给定的用例,Lombok将无法生成方法来设置Foo类中定义的参数值

这方面的解决办法是:

  • 手动创建条形图的构造函数
  • 在该构造函数上放置生成器注释

  • 有更好的解决办法吗

    我将此留作参考,因为其他答案表明,现在(不是在发布此答案时)库中有一个@SuperBuilder功能,它似乎更合适。

    这有点隐蔽,但人们以前有过这个问题,请看:

    总结博客文章

    @AllArgsConstructor
    public class Parent {
      private String a;
    }
    
    public class Child extends Parent {
    
      private String b;
    
      @Builder
      private Child(String a, String b){
        super(a);
        this.b = b;
      }
    }
    
    允许您使用

    Child.builder().a("testA").b("testB").build()
    

    目前有一个解决这个问题的方案正在进行中。检查此处的进度:

    Lombok在版本1.18.2中引入了实验性功能,用于解决Builder注释面临的继承问题,并可通过@SuperBuilder注释解决,如下所示

    @SuperBuilder
    public class ParentClass {
        private final String a;
        private final String b;
    }
    
    @SuperBuilder
    public class ChildClass extends ParentClass{
        private final String c;
    }
    
    现在,可以按如下方式使用生成器类(这在@Builder注释中是不可能的)


    在我看来,这是一个很好的解决办法。你认为它应该如何工作?别怪我!除非有人改进了库,否则这就是现有的支持。我无法让它与多个继承层一起工作。但是@Anamika对
    @SuperBuilder
    的回答对我来说很有效。我将编辑评论移到了答案的顶部,这个答案比@SuperBuilder的功能更旧。Idea 2018.1在编辑器中显示错误,但构建和运行是可以的。完美!并与多个继承层一起工作。非常感谢。
    ChildClass.builder().a("testA").b("testB").c("testC").build();