是否有可能使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(); }