Eclipse의 hashCode+equals VS. Apache의 HashCodeBuilder+EqualsBuilder

Eclipse에 내장된 기능으로도 특정 객체의 hashCode()와 equals()를 작성할 수 있다.

사용법은,
마우스 오른쪽 클릭하여 나오는 context 메뉴로부터 Source > Generate hashCode() and equals() ... 를 클릭하면 된다.

그러면, 다음과 같은 코드가 생성될 것이다.

@Override     
public int hashCode() {         
    final int prime = 31;         
    int result = 1;         
    result = prime * result + ((link == null) ? 0 : link.hashCode());
    result = prime * result + ((menuCode == null) ? 0 : menuCode.hashCode());         
    result = prime * result + ((menuName == null) ? 0 : menuName.hashCode());
    result = prime * result + ((upperCode == null) ? 0 : upperCode.hashCode());
    return result;     
}      

@Override     
public boolean equals(Object obj) {         
    if (this == obj) return true;
    if (obj == null) return false;         
    if (getClass() != obj.getClass()) return false;         
    MenuItem other = (MenuItem) obj;         
    if (link == null) {             
        if (other.link != null) return false;         
    } else if (!link.equals(other.link)) return false;         
       if (menuCode == null) {             
        if (other.menuCode != null) return false;         
    } else if (!menuCode.equals(other.menuCode)) return false;         
    if (menuName == null) {
        if (other.menuName != null) return false;         
    } else if (!menuName.equals(other.menuName)) return false;         
    if (upperCode == null) { 
        if (other.upperCode != null) return false;         
    } else if (!upperCode.equals(other.upperCode)) return false;         
    return true;     
} 

그런데, Apache의 라이브러리를 사용하면, 보다 깔끔한(!) 코드와 가독성을 얻을 수 있다.
우선, common-lang*.jar를 구하고, 다음과 같이 작성한다.

import org.apache.commons.lang.builder.EqualsBuilder; 
import org.apache.commons.lang.builder.HashCodeBuilder;  
...      

@Override     
public int hashCode() {         
    return new HashCodeBuilder(3, 11).append(upperCode).append(menuCode).append(menuName).append(link)         .toHashCode();     
}

@Override     
public boolean equals(Object obj) {         
    if (this == obj) return true;
    if (obj == null) return false;         
    if (getClass() != obj.getClass()) return false;
    MenuItem other = (MenuItem) obj;

    return new EqualsBuilder().append(this.upperCode, other.upperCode).append(this.menuCode, other.menuCode)         .append(this.menuName,     other.menuName).append(this.link, other.link).isEquals();     
}  

댓글

Designed by JB FACTORY