【问题标题】:Can I remove the Child class' constructor when using Lombok's @SuperBuild annotation使用 Lombok 的 @SuperBuild 注释时,我可以删除子类的构造函数吗
【发布时间】:2021-02-17 09:10:40
【问题描述】:

我是使用 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 类的 constructor 全部移除,那么 Child 类上的 @SuperBuilder 注释能否保证最终字段的初始化仍然发生? 换句话说,我是否可以完全删除 Child 类的 constructor 并在 ChildParent@SuperBuilder 注释/strong> 上课?

我特别想使用@SuperBuilder。我在某处读到我不能在课堂上将@Builder@SuperBuilder 混合在一起。

如果有任何建议或解释,我将不胜感激。

【问题讨论】:

    标签: java intellij-idea lombok intellij-lombok-plugin


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多