默认生成的hashCode和equals实现最多是丑陋的。
是否有可能使eclipse从HashCodeBuilder和EqualsBuilder生成一个,甚至可能使用ToStringBuilder生成toString?
答案 0 :(得分:11)
答案 1 :(得分:5)
您可以使用自定义构建器将Eclipse配置为生成toString()
。在我们的案例ToStringBuilder
来自Apache Commons Lang。你可以在这里看到http://azagorneanu.blogspot.com/2011/08/how-to-generate-equals-hashcode.html如何做到这一点。
该博客文章还包含Eclipse模板,用于使用Apache Commons Lang构建器生成equals()
,hashCode()
和compareTo()
。
答案 2 :(得分:3)
您可以使用Eclipse中的代码模板执行此操作。
这是我用HashCodeBuilder和EqualsBuilder的例子找到的solution。
模板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();
}
答案 3 :(得分:3)
我使用名为“Commonclipse”的Eclipse插件
安装后,当您在java源文件中右键单击时,会看到一个新的上下文菜单项“commonclipse”。它可以基于Apache公共库生成equals,hashcode,toString和compareTo方法。
要安装它,请在eclipse更新中使用:http://commonclipse.sourceforge.net
答案 4 :(得分:1)
我制作了这个模板,检查了几个答案,网站并在Eclipse Luna上进行测试。转到Windows->首选项,然后转到Java-> Editor->模板并将其添加到那里。
${: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();
}
答案 5 :(得分:-1)
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();
}