// eqauls 호출을 막는 매서드
@Overide
public boolean eqauls(Object object) {
throw new AssertionError(); // 호출 금지
}
예시
public final class CaseInsensiveString {
private final String s;
public CaseInsensitiveString(String s) {
this.s = Object.requireNonNull(s);
}
@Override
public boolean equals(Object o) {
if(o instanceof CaseInsensitiveString)
return s.equalsIgnoreCase(
(( CaseInsensitiveString o).s);
if(o instanceof String)
return s.equalsIgnoreCase((String) o);
return false;
}
해당 클래스는 equals에서 대소문자를 무시한다.
String의 equals와 CaseInsensitiveString의 equals 는 다른 값을 반환한다.
해당 클래스의 equals를 String과 연동시키겠다는 생각을 버려야한다.
결과
@Overide
public boolean equals(Object o) {
return o instanceof CaseInsensitiveString &&
((CaseInsensitiveString) o).s.eqaulsIgnoreCase(s);
}