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

2022-09-03 02:55:58

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

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

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

谢谢。


答案 1

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

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


答案 2

在 eclipse 首选项(窗口>首选项)中,转到 Java > 编辑器>模板。

在那里,你可以创建一个带有name:hashcode context:java description:Create a hashcode method的teplate。该模式应包含如下内容:

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

保存并返回到 Java 类。键入名称(哈希代码),然后按 Ctrl 回车键。然后,您可以从下拉列表中选择模板。

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