问题描述
我刚开始使用 Lombok 注释。我的目标是通过使用 Lombok 注释来最小化任何代码样板
我有 ff。我用 Lombok 的 @SuperBuilder
@Service
@SuperBuilder
public class Child extends Parent{ //class doesn't contain matching constructor for autowiring (error message)
private final ChildFieldA a;
private final ChildFieldB b;
private final ChildFieldC c;
public Child(ParentField d,ParentField e,ChildField a,ChildField b,ChildField c){
super(d,e); //Expected 1 arguments but found 3 (error message)
this.a = a;
this.b = b;
this.c = c;
}
}
和抽象父类,
@SuperBuilder
public abstract class Parent{
private final ParentField d;
private final ParentField e;
}
请注意,根据 2 个类的当前定义,Child 类有 2 条错误消息。
如果我完全删除整个 Child 类的构造函数,Child 类上的 @SuperBuilder
注释能否保证最终字段的初始化仍然发生?
换句话说,我可以完全删除 Child 类的 构造函数 并保留 Child 和 上的 @SuperBuilder
注释吗?家长班级?
我特别想使用 @SuperBuilder
。我在某处读到我不能在课堂上将 @Builder
与 @SuperBuilder
混用。
如果您有任何建议或解释,我将不胜感激。
谢谢。
解决方法
这取决于您的用例。如果您仅使用 @SuperBuilder
以编程方式创建类的实例,则删除所有其他构造函数是合理的。
但是,@Service
表示您使用的是 Spring。 Spring 不能使用构建器来执行自动装配。它只能使用基于构造函数或基于 setter 的注入。
因此,您需要一个包含所有必需 bean 的构造函数,或者它们的无参数构造函数和 setter。