Java 生成equals和hashcode时忽略属性

Java 生成equals和hashcode时忽略属性,java,eclipse,guava,Java,Eclipse,Guava,假设我有一个类别客户: public class Customer { private String firstName; private String lastName; private String doNotAddMeToEquals; //Getters and Setters below } 我正在使用Eclipse中的生成equals()和hashCode()方法;但是,我也可以使用eclipse->Source->Generate HashCode/Equals。不管怎样…

假设我有一个类别客户:

public class Customer {

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

//Getters and Setters below

}
我正在使用Eclipse中的生成equals()和hashCode()方法;但是,我也可以使用eclipse->Source->Generate HashCode/Equals。不管怎样……都没关系

有没有一种方法可以注释属性doNotAddMeToEquals,这样当我使用guava插件生成equals&hashcode方法时,该属性就不会显示在列表中

无需更改插件或创建模板


提前谢谢

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


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

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

@EqualsAndHashCode(exclude = {"nameOfField"})
那就是你的情况

@EqualsAndHashCode(exclude = {"doNotAddMeToEqualsAndHashCode"})

你指的是什么番石榴插件?Guava不提供生成equals和hashCode方法的“插件”。它提供了一些实用方法,使编写equals和hash代码变得更容易,但要省略某个特定属性,首先要做的就是…不使用该特定属性写入位。另一方面,如果您正在谈论Eclipse的标准equals/hashcode生成器,对话框会明确询问您要包括哪些属性。您确定吗?这就是问题所在。我今天遇到了一个障碍,我只是对所有东西生成了equals方法。后来我发现其中一处房产不应该在那里。没有什么大不了的,因为测试用例是可靠的,并且指出了这一点。所以我很好奇是否有一种方法可以注释这个属性。。。我真的不认为有什么办法,但无论如何还是要问。@JasonMcD:啊。这本身不是番石榴的一部分;有人在番石榴的基础上构建了它,但命名并没有明确说明这一点。不幸的是,注释是基于字符串的,但这并没有那么糟糕,因为它得到了编译时检查。有人计划从这一点切换到直接注释字段,但我不知道这是否已被遗忘或放弃或其他任何东西。@maaartinus:现在你可以使用
@EqualsAndHashCode.Include
@EqualsAndHashCode.Exclude
直接注释字段。