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

时间:2011-06-06 16:38:55

标签: java eclipse hashcode eclipse-jdt

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

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

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

感谢。

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

在eclipse首选项(Window> Preferences)中转到Java>编辑>模板。

在那里你可以创建一个名字的teplate:hashcode context:java description:创建一个hashcode方法。模式应包含以下内容:

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

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

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