在看commons-lang.jar包源码时候的一些发现及实践
通常,我们在完成一个标准的JavaBean的时候,都需要同时完成equals,toString和hashCode三个方法,一般手动来写的话,实在是很麻烦,特别是如果一个JavaBean中有复杂的数据类型,如集合类型,日期类型等这种情况下,做起来更让人头痛。
于是我用了common-lang.jar这个包里面的一些类来帮我做这三个令人厌烦的工作,比如我现在有一个简单JavaBean,代码如下:
public class GenericModel implements Serializable { private static final long serialVersionUID = 3294254521331173014L; protected String id; protected Date createTime; protected Date updateTime; public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public String getId() { return id; } public void setId(String id) { this.id = id; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } public boolean equals(Object object) { return EqualsBuilder.reflectionEquals(this, object); }}public boolean equals(Object obj){ if (obj == null) {return false;} if (obj == this) {return true;} if (obj.getClass() != getClass()) {return false;} GenericModel gm= (GenericModel) obj; return new EqualsBuilder() .append(id, gm.getId()) .append(createTime , gm.getCreateTime()) .append(updateTime, gm.getUpdateTime()) .isEquals();}public int hashCode() { return new HashCodeBuilder(17, 37) .append(id) .append(createTime) .append(updateTime) .toHashCode(); }public HashCodeBuilder(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber) { if (initialNonZeroOddNumber == 0) { throw new IllegalArgumentException("HashCodeBuilder requires a non zero initial value"); } if (initialNonZeroOddNumber % 2 == 0) { throw new IllegalArgumentException("HashCodeBuilder requires an odd initial value"); } if (multiplierNonZeroOddNumber == 0) { throw new IllegalArgumentException("HashCodeBuilder requires a non zero multiplier"); } if (multiplierNonZeroOddNumber % 2 == 0) { throw new IllegalArgumentException("HashCodeBuilder requires an odd multiplier"); } iConstant = multiplierNonZeroOddNumber; iTotal = initialNonZeroOddNumber;}public String toString() { return new ToStringBuilder(this) .append("id", id) .append("createTime", createTime) .append("updateTime", updateTime) .toString();}public boolean equals(Object object) { return EqualsBuilder.reflectionEquals(this, object);}public int hashCode(){ return HashCodeBuilder.reflectionHashCode(this);}public String toString(){ return ToStringBuilder.reflectionToString(this);}