java - EqualsAndHashCode.Exclude 无法解析为类型
问题描述
我将 Project Lombok 与 Eclipse 一起使用,我可以编译以下类。
现在我想通过使用 Lombok 文档中所示的注释从 hash 和 equals 方法中排除@EqualsAndHashCode.Exclude
一个字段。
不幸的是,这不能编译。为什么?
@Data
@EqualsAndHashCode(callSuper = true)
@MappedSuperclass
public class Foo extends Bar implements Serializable {
private static final long serialVersionUID = 36364364363634634;
@Id
@GenericGenerator(name = "PKGenerator", strategy = "com.project.utils.PrimaryKeyGenerator")
@GeneratedValue(generator = "PKGenerator")
@Column(name = "guid")
@EqualsAndHashCode.Exclude
private String id;
@NotNull
private String code;
//...other fields omitted
}
我得到的编译错误是:
EqualsAndHashCode.Exclude cannot be resolved to a type
忽略注释应用于哪些字段以及使用callSuper=true
或false
环境是:
Version: Oxygen.3a Release (4.7.3a)
..
Lombok v1.18.0 "Envious Ferret" is installed.
解决方案
TL;DR:您需要 Lombok 1.16.22 或更高版本,但您真正使用的是哪个 Lombok?(见下文)
我发现问题在于 Lombok Eclipse 插件(最新)使用的 Lombok 版本与 maven 依赖项(较旧)之一不匹配。
如果你愿意,spring boot 是“责备”的,因为该项目是使用start.spring.io设置的,并且在撰写本文时,依赖项spring-boot-starter-web
将 lombok 版本属性设置为 1.16.20。
在这种情况下,有效 pom 中的版本优于 IDE 插件的版本,正如我们可以从The Lombok 文档中看到的那样:
在 lombok 1.16.22 之前,可以使用注释的
of
和exclude
参数完成包含/排除。@EqualsAndHashCode
这种旧式包含机制仍然受支持,但将来会被弃用。
推荐阅读
- c# - C# 错误索引超出了数组的范围(Visual Studio、Winform、.NET Framework 4.6)
- google-cloud-logging - 为什么 Stackdriver 日志记录不遵守时间戳的高级过滤条件?
- ruby-on-rails - 为 nil:NilClass (NoMethodError) 获取未定义的方法“click_button”
- c# - Windows 窗体没有响应:如何解决此问题?
- kubernetes - 如何在终端中登录 kubenetes 仪表板 pod
- python - 在自定义层中命名层的权重
- c# - SelectMany 嵌套在父级的 lambda 与 SelectMany 之后的 SelectMany
- php - PHP - 使用 TesseractOCR 从图像中读取文本
- validation - Vue 阻止页面渲染,直到验证通过
- python - Python中的符号->是什么意思?