【发布时间】:2019-09-04 21:08:23
【问题描述】:
@Data
public abstract class B {
private final String str;
}
@Data
public class A extends B{
private final String s;
}
在intellij中A类的数据报错,但是代码可以通过命令行成功编译,不知道该怎么办
【问题讨论】:
标签: java lombok intellij-plugin
@Data
public abstract class B {
private final String str;
}
@Data
public class A extends B{
private final String s;
}
在intellij中A类的数据报错,但是代码可以通过命令行成功编译,不知道该怎么办
【问题讨论】:
标签: java lombok intellij-plugin
一个问题是@Data 用于可变数据,而您的类中没有任何可变数据。所以使用@Data 是完全错误的......而且它是否编译并不重要。
如果您需要可变数据,请删除 final 字段。对于不可变数据,将所有字段设为final 并使用@Value。有时,需要部分可变的数据,但我尽量避免它,因为它会造成混淆(有些字段可以设置,有些则不能),而且两者都有缺点。
另一个问题是 Lombok 无法访问类层次结构。由于B 有一个final 字段,您需要在构造函数中对其进行初始化,这意味着A 的构造函数必须调用非默认构造函数。龙目岛是不可能的。 Lombok 中有@Superbuilder,这是 Lombok 唯一能很好地处理类层次结构的特性。
【讨论】:
@Data 注解不添加默认构造函数。
尝试将@NoArgsConstructor 添加到您的基类B 以使用Lombok 生成默认构造函数。
您还可以阅读 @Data 的实际含义 here。
【讨论】:
这不会编译事件。在Intellij,当你不确定lombok代码有什么问题时,你可以打开你不确定的课程,继续Refactor -> Delombok -> All lombok annotations 你会看到什么龙目岛实际上是为你创造的。
【讨论】: