override the equals & hashcode & compareTo & toString

总结一下相关的 equals/ hashCode / compareTo / toString method写法
1. org.apache.commons.lang.builder.EqualsBuilder
注意:复写equals,必须要复写hashCode, 在equals比较的Field必须也出现在hashCode里,反之亦然。
    @Override
    public boolean equals(Object o) {
        if (o == null) { return false; }
        if (! (o instanceof AccountInstrument)) {
            return false;
        }
        if (o == this) { return true; }
        AccountInstrument rhs = (AccountInstrument) o;
        return new EqualsBuilder()
                      .append(accountId, rhs.accountId)
                      .append(instrumentId, rhs.instrumentId)
                      .isEquals();

    }
2. org.apache.commons.lang.builder.HashCodeBuilder
请参考equals, 可以使用HashCodeBuilder(17, 35) as HashCodeBuilder(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber)选择任意、非零、奇数
   // cache for toString() and hashCode() as this is a immutable object
    private Integer hashCodeCache = null;
    private String toStringCache = null;
    @Override
    public int hashCode() {
        if (hashCodeCache == null) {
            hashCodeCache = new HashCodeBuilder()
            .append(accountId).append(instrumentId).toHashCode();
        }
        return hashCodeCache;
    }

3. org.apache.commons.lang.builder.ToStringBuilder
ToStringStyle定义输出的格式,可以创建子类实现新的输出格式。
    @Override
    public String toString() {
        if (toStringCache == null) {
            toStringCache = ToStringBuilder.reflectionToString(this, ToStringStyle.DEFAULT_STYLE);
        }
        return toStringCache;
    }
在API文档的例子:
public class MyStyle extends ToStringStyle {
   protected void appendDetail(StringBuffer buffer, String fieldName, Object value) {
     if (value instanceof Date) {
       value = new SimpleDateFormat("yyyy-MM-dd").format(value);
     }
     buffer.append(value);
   }
}


4. org.apache.commons.lang.builder.CompareToBuilder
    public int compareTo(AccountInstrument o) {
        return new CompareToBuilder()
        .append(this.accountId, o.accountId)
        .append(this.instrumentId, o.instrumentId)
        .toComparison();
    }

你可能感兴趣的:(apache,cache)