问题描述
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 中会出现以下错误。
requiredArgsConstructor 不是在基类中创建构造函数吗?什么是最好的方法 使用任何 Lombok 构造函数注释删除派生类中的构造函数?
注意:如果我按照此线程中的建议在基类中使用 NoArgsConstructor
,则相同的情况也适用。但是这样我就不能从派生类调用 super 方法了。
解决方法
RequiredArgsConstructor 不是在基类中创建构造函数吗?
是的,确实如此。但是在您的情况下,lombok 将创建包含所有 final
字段的构造函数,因为您使用 @RequiredArgsConstructor
并且它们是最终的
Lombok 需要基类中的默认构造函数
但 lombok 确实要求你有一个默认(这意味着在父类中没有参数的构造函数。