继承类的 Lombok 注释失败

问题描述

我有一个 B 类,它扩展了一个基类 A。

A 类如下:

@requiredArgsConstructor(onConstructor = @__(@Inject))
public class A {

    @Getter(AccessLevel.PROTECTED)
    private final AccessDao accessDao;

    @Getter
    private final EntityFactory entityFactory;
 
    // member functions
}

B 类如下:

public class B extends A {
   private final AdditionalDao additionalDao;

   public B (AccessDao accessDao,EntityFactory entityFactory,AdditionalDao additionalDao) {
      super(accessDao,entityFactory);
      this.additionalDao = Preconditions.checkNotNull(additionalDao);
   }

  // Member functions
}

在类 B 之前添加 @requiredArgsConstructor(onConstructor = @__(@Inject)) 在 Intellij 中会出现以下错误

Lombok 需要基类中的认构造函数

requiredArgsConstructor 不是在基类中创建构造函数吗?什么是最好的方法 使用任何 Lombok 构造函数注释删除派生类中的构造函数

注意:如果我按照此线程中的建议在基类中使用 NoArgsConstructor,则相同的情况也适用。但是这样我就不能从派生类调用 super 方法了。

解决方法

RequiredArgsConstructor 不是在基类中创建构造函数吗?

是的,确实如此。但是在您的情况下,lombok 将创建包含所有 final 字段的构造函数,因为您使用 @RequiredArgsConstructor 并且它们是最终的

Lombok 需要基类中的默认构造函数

但 lombok 确实要求你有一个默认(这意味着在父类中没有参数的构造函数。