Lombok @builder on a class that extends another class

后端 未结 3 1954
一个人的身影
一个人的身影 2020-12-28 12:15

I have two classes Child extends Parent. I need to put @Builder annotation on the classes such that I do not need to create the builder my self.

3条回答
  •  醉梦人生
    2020-12-28 12:53

    Since release 1.18.2 lombok includes the new experimental @SuperBuilder. It supports fields from superclasses (also abstract ones). With it, the solution is as simple as this:

    @SuperBuilder
    public class Child extends Parent {
       private String a;
       private int b;
       private boolean c;
    }
    
    @SuperBuilder
    public class Parent {
        private double d;
        private float e;
    }
    
    Child instance = Child.builder().b(7).e(6.3).build();
    

    Update 2019-10-09: If you use IntelliJ, you need at least version 0.27 of the IntelliJ Lombok plugin to use @SuperBuilder.

    PS: @AllArgsConstructor(onConstructor=@__(@Builder)) does not work because @Builder is an annotation-processing annotation that lombok translates to code during compilation. Generating and then translating new lombok annotation would require several iterations of annotation processing, and lombok does not support that. @Autowired, in contrast, is a regular Java annotation available at runtime.

提交回复
热议问题