首页 > 解决方案 > 使用 Lombok 的 @SuperBuild 注释时,我可以删除子类的构造函数吗

问题描述

我是使用 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保证最终字段的初始化仍然发生?换句话说,我可以完全删除类的构造函数并保留类和类的@SuperBuilder注释吗?

我特别想用@SuperBuilder. 我在课堂上无法混到@Builder的地方读到。@SuperBuilder

我将不胜感激任何建议或解释。

标签: javaintellij-idealombokintellij-lombok-plugin

解决方案


这取决于您的用例。如果您仅用于@SuperBuilder以编程方式创建类的实例,则删除所有其他构造函数是合理的。

但是,@Service表明您正在使用 Spring。Spring 不能使用构建器来执行自动装配。它只能使用基于构造函数或设置器的注入。因此,您需要一个包含所有必需 bean 的构造函数,或者为它们提供一个无参数构造函数和设置器。


推荐阅读