Lombok @builder 在扩展另一个类的类上

新手上路,请多包涵

我有两个班级 Child extends Parent 。我需要在类上添加 @Builder 注释,这样我就不需要自己创建构建器。

 package jerry;// Internal compiler error: java.lang.NullPointerException

import lombok.AllArgsConstructor;
import lombok.Builder;

@AllArgsConstructor(onConstructor=@__(@Builder))
public class Child extends Parent {
//Multiple markers at this line
//  - Implicit super constructor Parent() is undefined. Must explicitly invoke another constructor
//  - overrides java.lang.Object.toString

   private String a;
   private int b;
   private boolean c;

}

@Builder
public class Parent {
    private double d;
    private float e;
}

我需要能够构建子实例,以便

Child child = Child.builder().a("aVal").b(1000).c(true).d(10.1).e(20.0F).build();

但到目前为止,我收到了代码注释中提到的错误。任何人都可以指出正确的方向如何使用 lombok 或任何其他类似的库来实现它吗?

子问题

为什么 @AllArgsConstructor(onConstructor=@__(@Autowired)) 编译但 @AllArgsConstructor(onConstructor=@__(@Builder)) 不编译?

原文由 zur 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 822
1 个回答

自 1.18.2 版 lombok 包含 新的实验性 @SuperBuilder 。它支持来自超类(也是抽象类)的字段。有了它,解决方案就这么简单:

 @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();

2019-10-09 更新: 如果您使用 IntelliJ,则至少需要 0.27 版的 IntelliJ Lombok 插件才能使用 @SuperBuilder

PS: @AllArgsConstructor(onConstructor=@__(@Builder)) 不起作用,因为 @Builder 是 lombok 在编译期间转换为代码的注释处理注释。生成然后翻译新的 lombok 注释将需要多次迭代注释处理,而 lombok 不支持。 @Autowired 相比之下,是在运行时可用的常规 Java 注释。

原文由 Jan Rieke 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题