龙目岛@Data抱怨“龙目岛需要在基类中使用默认构造函数”,当抽象类具有最终字段时

2022-09-03 10:12:36
@Data
public abstract class B {
   private final String str;
}

@Data
public class A extends B{
   private final String s;
}

A类上的数据在intellij中抱怨,但代码可以通过命令行成功编译,不知道该怎么办


答案 1

一个问题是,这是针对可变数据的,在你的类中没有可变的。所以使用是完全错误的...它是否编译并不重要。@Data@Data

如果需要可变数据,请删除该字段。对于不可变数据,请创建所有字段并使用 。有时,需要部分可变的数据,但我努力避免它,因为它令人困惑(有些字段可以设置,有些不能),并且它们提供了两者的缺点。finalfinal@Value


另一个问题是龙目岛无法访问类层次结构。有了最后一个字段,你需要在构造函数中初始化它,这意味着 的构造函数必须调用一个非默认构造函数。这在龙目岛是不可能的。在龙目岛中,这是龙目岛处理类层次结构的唯一特征。BA@Superbuilder


答案 2

批注不会添加默认构造函数。尝试向基类添加 a,以使用龙目岛生成默认构造函数。@Data@NoArgsConstructorB

您还可以在此处阅读实际含义。@Data


推荐