我想知道是否有人知道在Java中使用eclipse生成的更新,构造函数,等于,散列,字符串等的好方法。 很多时候,在我使用自动生成的代码存根之后,我将一个成员变量添加到类中,然后我需要删除自动生成的代码,并重新执行它。 有没有办法让eclipse将新变量添加到自动生成的代码存根中?
编辑:确定删除不是必需的,但我仍然需要去生成每个,我正在寻找一个自动解决方案。
答案 0 :(得分:6)
这不是您问题的完全解决方案,但我不再使用Eclipse自动生成的方法,而是使用Apache commons lang EqualsBuilder和HashCodeBuilder:
所以,例如你可以这样做:
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
public class EqualsTest {
private String foo;
private int bar;
// getters and setters
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
}
这使用反射,添加字段时无需更改。但是,还有其他选项可以指定要使用的字段,以及是否还要考虑超类的hashCode。
编辑:正如已经指出的那样,反思方面可能会有一些性能损失。就个人而言,我不在生产代码中使用反射HashCodeBuilder或EqualsBuilder,我使用toHashCode(如下所示)。但是,我确实使用ReflectionToStringBuilder进行日志记录等。以下是一个不使用反射的示例,但是在添加字段时需要添加另一行:
public int hashCode() {
// you pick a hard-coded, randomly chosen, non-zero, odd number
// ideally different for each class
return new HashCodeBuilder(17, 37).
append(foo).
append(bar).
toHashCode();
}
有关hashCodeBuilder的更多讨论,请参阅apache commons equals/hashcode builder
答案 1 :(得分:4)
请访问www.projectlombok.org,作为自己编写这些方法的替代方法。特别是@Data注释似乎符合您的需求,请参阅http://www.projectlombok.org/features/Data.html。
答案 2 :(得分:2)
我用一个字段创建了我自己的项目,并要求eclipse生成所有基本方法。之后我添加了一个新字段,我要求它再次生成这些方法(source - > generate ...),它提示我更换旧的,我点击'yes'并显示更新的方法。
希望有所帮助