如何忽略 Java equals() 中自定义对象的 1 个字段?

new*_*ner 8 java equals lombok

我有一个Person包含 20 个字段并存储在 dynamoDB 中的对象。我想Person根据某些输入创建一个新对象,检查数据库中是否存在相同的对象。如果存在,我想在 的基础上比较这两个对象19 fields out of 20。要忽略的字段是布尔标志检查。

我用来Lombok @Data生成 equals 方法。

有没有一种方法可以做到这一点,而不必equals自己编写完整的重写方法?

Nic*_*lle 11

您还可以将 Lombok 的 @EqualsAndHashCode 与排除结合使用。

@EqualsAndHashCode
public class MyObject{

    @EqualsAndHashCode.Exclude
    Object fieldToExclude;

}
Run Code Online (Sandbox Code Playgroud)

除了选择要排除的内容之外,您还可以选择像这样选择您想要包含的内容。所有未使用 Include 注释的内容都不会在 equals & hashcode 实现中使用。

@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class MyObject{

    @EqualsAndHashCode.Include
    Object fieldToInclude;

}
Run Code Online (Sandbox Code Playgroud)

Lombok EqualsAndHashCode 文档

  • @Arnaud 我个人会远离作为字符串值传递的字段名称,因为重构时它们可能会被忘记 (3认同)