是否有可能使eclipse生成hashCode并与HashCodeBuilder和EqualsBuilder相等

默认生成的hashCode和equals实现最多是丑陋的。

是否有可能使eclipse从HashCodeBuilder和EqualsBuilder生成,甚至可能使用ToStringBuilder生成toString?

看看Commons4E

它暂时没有更新,但我不认为它需要改变很多?

更新:刚刚检查3.4.1,它工作正常。

您可以将Eclipse配置为使用自定义构建器生成toString() 。 在我们的案例中来自Apache Commons Lang的 ToStringBuilder 。 你可以在这里看到http://azagorneanu.blogspot.com/2011/08/how-to-generate-equals-hashcode.html如何做到这一点。

该博客文章还包含Eclipse模板,用于使用Apache Commons Lang构建器生成equals()hashCode()compareTo()

您可以使用Eclipse中的代码模板执行此操作。

这是我用HashCodeBuilder和EqualsBuilder的例子找到的解决方案 。

模板EqualsBuilder:

  public boolean equals(Object o) { boolean result = false; if (this == o) { result = true; } else if (o instanceof $CLASSNAME$) { $CLASSNAME$ other = ($CLASSNAME$) o; result = new org.apache.commons.lang.builder.EqualsBuilder() .append($END$ .isEquals(); } return result; } 

模板HashCodeBuilder:

  public int hashCode() { return new org.apache.commons.lang.builder.HashCodeBuilder() .append( $END$ ) .toHashCode(); } 

我使用名为“Commonclipse”的Eclipse插件

安装后,当您在java源文件中右键单击时,会看到一个新的上下文菜单项“commonclipse”。 它可以基于Apache公共库生成equals,hashcode,toString和compareTo方法。

要安装它,请在eclipse更新中使用: http : //commonclipse.sourceforge.net

我制作了这个模板,检查了几个答案,网站并在Eclipse Luna上测试它。 转到Windows-> Preferences,然后转到Java-> Editor-> Templates并将其添加到那里。

 ${:import(org.apache.commons.lang3.builder.HashCodeBuilder, org.apache.commons.lang3.builder.EqualsBuilder)} @Override public int hashCode() { HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(); hashCodeBuilder.append(${field1:field}); hashCodeBuilder.append(${field2:field}); hashCodeBuilder.append(${field3:field}); hashCodeBuilder.append(${field4:field}); hashCodeBuilder.append(${field5:field}); return hashCodeBuilder.toHashCode(); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } ${enclosing_type} rhs = (${enclosing_type}) obj; EqualsBuilder equalsBuilder = new EqualsBuilder(); equalsBuilder.append(${field1}, rhs.${field1}); equalsBuilder.append(${field2}, rhs.${field2}); equalsBuilder.append(${field3}, rhs.${field3}); equalsBuilder.append(${field4}, rhs.${field4}); equalsBuilder.append(${field5}, rhs.${field5});${cursor} return equalsBuilder.isEquals(); } 

eclipse 3.5.0的Eclipse java代码模板,源自Bruno Conde的模板:

 @Override public boolean equals(Object obj) { if (obj == null) { return false; } else if (obj == this) { return true; } else if (obj.getClass() != this.getClass()) { return false; } ${enclosing_type} other = (${enclosing_type}) obj; return new EqualsBuilder()// .appendSuper(super.equals(other))// .append(${cursor})// .isEquals(); } 

 @Override public int hashCode() { return new HashCodeBuilder(${cursor})// .append()// .toHashCode(); }