建议并且有时需要表示值(值类)的类来覆盖hashCode()
,equals()
[和可选的toString()
]方法。
这些方法返回的值取决于类及其超类的所有成员变量或子集。要正确实现它们,你必须要了解一些关于哈希和一点代数和集合理论的理论(不要太多,几乎所有内容都在 javadocs 对于这些方法和有效Java形式Josh Bloch。)
在大多数情况下,此方法的实现遵循模板,IDE(如Eclipse JDT)包含生成它们的工具。但是,工具生成器无法做出任何假设,只使用语言和标准库中提供的构造生成这些方法。因为这些方法通常看起来很丑陋。
实现这些方法的另一种方法是使用像Apache(commons-lang)HashCodeBuilder
,EqualsBuilder
和ToStringBuilder
这样的库。使用这些实用程序,可以实现自己看起来更好的hashCode()
和equals()
方法。
我的问题是关于这两种方法的结合。我希望能够自定义Eclipse的hashCode()
和equals()
生成器,以便使用HashCodeBuilder
和朋友生成它们。
如果不调整JDT,是否可以(以及如何)这样做?只编写将覆盖默认实现的小插件(但不更改JDT代码)。
感谢。
答案 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。然后,您可以从下拉列表中选择模板。
对每种方法执行相同操作。您还可以创建一个将所有内容组合在一起的模板。