首页 > 解决方案 > 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=truefalse

环境是:

Version: Oxygen.3a Release (4.7.3a)
..
Lombok v1.18.0 "Envious Ferret" is installed.

标签: javaequalslombok

解决方案


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 之前,可以使用注释的ofexclude参数完成包含/排除。@EqualsAndHashCode这种旧式包含机制仍然受支持,但将来会被弃用。


推荐阅读