【问题标题】:Ignore property when generating equals and hashcode生成equals和hashcode时忽略属性
【发布时间】:2013-10-21 22:45:25
【问题描述】:

假设我有一个类 Customer:

public class Customer {

private String firstName;
private String lastName;
private String doNotAddMeToEquals;

//Getters and Setters below

}

我在 Eclipse 中使用 Guava Eclipse Plugin 来生成我的 equals() 和 hashCode() 方法;但是,我也可以使用 eclipse -> Source -> Generate HashCode / Equals。无论哪种方式……都无所谓。

有没有办法对属性 doNotAddMeToEquals 进行注释,这样当我使用 guava 插件生成 equals 和 hashcode 方法时,该属性不会显示在列表中?

无需更改插件或创建模板。

提前致谢!!

【问题讨论】:

  • 你指的是什么番石榴插件? Guava 没有提供“插件”来生成 equals 和 hashCode 方法。它提供了一些实用方法,使编写 equals 和 hash 代码变得更容易,但你所要做的就是省略一个特定的属性……首先不要用那个特定的属性写位。
  • 另一方面,如果您在谈论 Eclipse 的标准 equals/hashcode 生成器,对话框会明确询问您要包含哪些属性。
  • 你确定那个路易斯吗? sourceforge.net/projects/guavaeclipse
  • SC 所以这个问题。我今天遇到了一个障碍,我只是在所有东西上生成 equals 方法。我后来发现,其中一处房产不应该在那里。没什么大不了的,因为测试用例很可靠并指出了这一点。所以我很好奇是否有办法对属性进行注释......我真的不认为有办法,但无论如何都要问。
  • @JasonMcD:啊。这本身不是番石榴的一部分。有人在 Guava 之上构建了它,但命名并不清楚。

标签: java eclipse guava


【解决方案1】:

听起来你想要的是这样的:

http://projectlombok.org/features/EqualsAndHashCode.html

它允许您使用注释来驱动 equals 和 hashcode 方法中包含哪些属性。

【讨论】:

  • 不幸的是,注释是基于字符串的,但这并没有那么糟糕,因为它得到了编译时检查。有计划从这里切换到直接注释字段,但我不知道这是否被遗忘或放弃了。
  • @maaartinus:现在你可以直接注释字段,使用@EqualsAndHashCode.Include@EqualsAndHashCode.Exclude
【解决方案2】:

使用 Lombok,您可以从 hashcode 和 equals 中排除属性,例如:

@EqualsAndHashCode(exclude = {"nameOfField"})

你的情况就是这样

@EqualsAndHashCode(exclude = {"doNotAddMeToEqualsAndHashCode"})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多