当前位置: 首页 > 知识库问答 >
问题:

当使用Lombok的@SuperBuild注释时,我可以删除孩子类的构造函数吗

郎成弘
2023-03-14

我不熟悉使用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

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

共有1个答案

景鸿晖
2023-03-14

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

但是,@Service表示您正在使用Spring。Spring不能使用构建器来执行自动连接。它只能使用基于构造函数或setter的注入。因此,您需要一个包含所有必需bean的构造函数,或者一个no-args构造函数和setters。

 类似资料:
  • 大家好,overflow社区,我正在努力解决Lombok的继承问题。我试图在子类上添加注释和,以便使用父lombok构造函数,但出现了错误“复制方法child()”。 父类: 儿童班: 错误消息: 重复方法Java类型中的孩子()(67109219) 感谢@rentox98的回复,我知道我的子类上的ArgsConstructor总是空的,这会导致两个相同的构造函数。 有没有Lombok方法可以基于

  • 问题内容: 在Jackson中,当您使用注释构造函数时,必须使用注释其参数。所以这个构造函数 变成这个: 我不明白为什么有必要。你能解释一下吗? 问题答案: Jackson必须知道以什么顺序将字段从JSON对象传递给构造函数。使用反射无法在Java中访问参数名称-这就是为什么您必须在注释中重复此信息的原因。

  • 我想了解为什么在这种特定情况下@InjectMocks不知道从抽象类中注入属性。有谁能帮我弄明白吗?多谢!!! 如果子类和父类都使用属性注入,那么我的单元测试工作没有问题。

  • 我有一把刀: 问题是,当我试图使用DAO进行加载调用时,使用DynamoDBMapper以field d1作为哈希键来获取项目,它会抛出一个DynamoDBExc0019,说:为公共DAO. getField2()找到了空键,但实际上表的值对应于field d2。问题,这是因为Lombok注释而不是手动突变代码,还是一般来说我们一起使用Lombok和DynamoDBAnnotions?

  • 我想拦截所有用特定注释注释类的构造函数调用。 我有这样一个方面: 还有一个例子: 现在,如果我更改方面并删除@注释过滤器,那么我看到aspectj正在拦截调用。此外,如果我创建一个默认构造函数,然后用注释对其进行注释,它也可以工作。 但是,我希望注释存在于类中,这样如果我有1个构造函数或10个,它们都将被相同地拦截(我只需要将其放在类中)。

  • 我有一个父类,其中包含构造函数注入的依赖项: 如果我从这个类继承,我总是需要重新定义一个调用父构造函数的构造函数吗? 使用 setter 注入,我似乎能够将依赖项保留在父类中,而不需要在子类中重新连接它,如果子类不接触链接到依赖项的功能,这对我来说听起来不错: 看起来,如果我想避免重复自动装配代码和处理子组件中的依赖关系,我只能使用setter或field injection来实现。 是否有更简洁