我正在做一个基于MySQL库自动生成代码的项目。它有点像JPA,但不完全是。
这是一个示例bean:
public class TemplateBean implements Bean {
private Integer templateId;
private Integer businessPartnerId;
public TemplateBean(final Integer businessPartnerId) {
this.businessPartnerId = businessPartnerId;
}
private TemplateBean(final Object nullObject, final Integer templateId, final Integer businessPartnerId) {
this.templateId = templateId;
this.businessPartnerId = businessPartnerId;
}
public TemplateBean(final ResultSet rs) throws SQLException {
this(null, rs.getInt(1), rs.getInt(2));
}
public Integer getTemplateId() {
return templateId;
}
public void setTemplateId(final Integer templateId) {
this.templateId = templateId;
}
public Integer getBusinessPartnerId() {
return businessPartnerId;
}
public void setBusinessPartnerId(final Integer businessPartnerId) {
this.businessPartnerId = businessPartnerId;
}
@Override
public String toString() {
return "Template(" + templateId + ", " + businessPartnerId + ")";
}
}现在我需要它来实现equals()和hashCode()。当然,我可以访问SQL中所有可用的数据,所以我认为实现equals()应该是可行的,但是如何创建一个好的hashCode()呢?
任何建议都将不胜感激。
发布于 2013-07-23 18:14:43
我建议使用EqualsBuilder
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
public class Person {
private String id;
private String name;
private String address;
private String phone;
private String version;
@Override
public boolean equals(Object object) {
return EqualsBuilder.reflectionEquals(this, object,);
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
or
/*
* equal() method with exclude fields.
* it will neglect id and version fields.
*
* */
@Override
public boolean equals(Object object) {
return EqualsBuilder.reflectionEquals(this, object, "id", "version");
}
}发布于 2013-07-23 18:27:24
一种非常方便的方法是使用Groovy提供的@EqualsAndHashCode注释。使用它就像这样简单
@EqualsAndHashCode
public class TemplateBean implements Bean {
// implementation omitted
}这将基于类的属性生成equals()和hashCode()方法,使用的算法与高效Java一书中概述的算法类似。
因为注释是通过AST转换实现的,所以可以在Java或Groovy类中使用它,当然您需要类路径上的Groovy库才能使用它。
https://stackoverflow.com/questions/17807213
复制相似问题