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

时间:2008-11-11 15:00:58

标签: java eclipse

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

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

6 个答案:

答案 0 :(得分:11)

查看Commons4E

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

更新:刚刚检查过3.4.1,它运行正常。

答案 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();
}