我在Eclipse中使用Project Lombok,并且可以编译以下类。
现在,我想通过使用像shown in the Lombok's documentation这样的注释@EqualsAndHashCode.Exclude
从哈希和equals方法中排除一个字段。
不幸的是,这无法编译。为什么?
@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.
答案 0 :(得分:1)
TL; DR:,您需要Lombok 1.16.22或更高版本,但是您真正使用的是哪个Lombok? (见下文)
我发现问题在于Lombok Eclipse插件使用的Lombok版本(最新)和Maven依赖项之一(旧)不匹配。
如果您愿意的话,由于项目是用start.spring.io设置的,而依赖项spring-boot-starter-web
在编写本文时将lombok版本属性设置为1.16.20,因此弹簧启动将是“罪魁祸首”。
在这种情况下,有效pom中的版本会与IDE插件的版本相抵触,正如我们从The Lombok documentation中可以看到的那样:
在lombok 1.16.22之前,可以使用
of
批注的exclude
和@EqualsAndHashCode
参数来进行包含/排除。 仍支持此旧式包含机制,但将 将来不推荐使用。
答案 1 :(得分:0)
您还更新了构建文件中的依赖项吗?