我有两个班级 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 许可协议
自 1.18.2 版 lombok 包含 新的实验性
@SuperBuilder
。它支持来自超类(也是抽象类)的字段。有了它,解决方案就这么简单:2019-10-09 更新: 如果您使用 IntelliJ,则至少需要 0.27 版的 IntelliJ Lombok 插件才能使用
@SuperBuilder
。PS:
@AllArgsConstructor(onConstructor=@__(@Builder))
不起作用,因为@Builder
是 lombok 在编译期间转换为代码的注释处理注释。生成然后翻译新的 lombok 注释将需要多次迭代注释处理,而 lombok 不支持。@Autowired
相比之下,是在运行时可用的常规 Java 注释。