Posts Tagged ‘Apache’
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(); }