如何自定义Eclipse生成的hashCode()和equals()?

建议(有时是必要的)表示值( 值类 )的来覆盖hashCode()equals() [和可选的toString() ]方法。 这些方法返回的值取决于类及其超类的所有成员变量或子集。 要正确实现它们,你必须要了解一些关于散列和一点代数和集合理论的理论(不要太多,几乎所有的东西都在这些方法的javadocs和有效的JavaformsJosh Bloch中解释。)
在大多数情况下,此方法的实现遵循模板,IDE(如Eclipse JDT)包含生成它们的工具。 但是,工具生成器无法做出任何假设,只使用语言和标准库中提供的构造生成这些方法。 因此,这些方法通常看起来非常难看。

实现这些方法的另一种方法是使用像Apache(commons-lang) HashCodeBuilderEqualsBuilderToStringBuilder 。 使用这些实用程序,可以实现自己看起来更好的hashCode()equals()方法。

我的问题是将这两种方法结合起来。 我希望能够自定义Eclipse的hashCode()equals()生成器,以便使用HashCodeBuilder和朋友生成它们。 如果不调整JDT,是否可以(以及如何)这样做? 只编写将覆盖默认实现的小插件(但不更改JDT代码)。

谢谢。

根据请求发布我的评论作为答案: Commonclipse ,一个便于使用Apache Commons的Eclipse插件,可以做你想做的事情。

警告:我最近没有这个插件的经验,这就是为什么我最初发布的评论,而不是答案。

在eclipse首选项(Window> Preferences)中,转到Java> Editor> Templates。

在那里,您可以创建一个名称为teplate的teplate:hashcode context:java description:创建一个哈希码方法。 模式应包含以下内容:

 public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } 

保存并返回到您的java类。 输入名称(哈希码),然后按ctrl enter。 然后,您可以从下拉列表中选择模板。

为您想要的每种方法执行相同的操作。 您还可以创建一个将所有内容组合在一起的模板。