// PhoneNumber를 비교할 수 있게 만든다. (91-92쪽) publicfinalclassPhoneNumberimplementsCloneable, Comparable<PhoneNumber> { privatefinalshort areaCode, prefix, lineNum;
privatestaticshortrangeCheck(int val, int max, String arg) { if (val < 0 || val > max) thrownewIllegalArgumentException(arg + ": " + val); return (short) val; }
@Override publicbooleanequals(Object o) { if (o == this) returntrue; if (!(o instanceof PhoneNumber)) returnfalse; PhoneNumberpn= (PhoneNumber) o; return pn.lineNum == lineNum && pn.prefix == prefix && pn.areaCode == areaCode; }
@Override publicinthashCode() { intresult= Short.hashCode(areaCode); result = 31 * result + Short.hashCode(prefix); result = 31 * result + Short.hashCode(lineNum); return result; }
/** * 이 전화번호의 문자열 표현을 반환한다. * 이 문자열은 "XXX-YYY-ZZZZ" 형태의 12글자로 구성된다. * XXX는 지역 코드, YYY는 프리픽스, ZZZZ는 가입자 번호다. * 각각의 대문자는 10진수 숫자 하나를 나타낸다. * <p> * 전화번호의 각 부분의 값이 너무 작아서 자릿수를 채울 수 없다면, * 앞에서부터 0으로 채워나간다. 예컨대 가입자 번호가 123이라면 * 전화번호의 마지막 네 문자는 "0123"이 된다. */ @Override public String toString() { return String.format("%03d-%03d-%04d", areaCode, prefix, lineNum); }
// 코드 14-2 기본 타입 필드가 여럿일 때의 비교자 (91쪽) publicintcompareTo(PhoneNumber pn) { intresult= Short.compare(areaCode, pn.areaCode); if (result == 0) { result = Short.compare(prefix, pn.prefix); if (result == 0) result = Short.compare(lineNum, pn.lineNum); } return result; }
// PhoneNumber를 비교할 수 있게 만든다. (91-92쪽) publicfinalclassPhoneNumberimplementsCloneable, Comparable<PhoneNumber> { privatefinalshort areaCode, prefix, lineNum;
privatestaticshortrangeCheck(int val, int max, String arg) { if (val < 0 || val > max) thrownewIllegalArgumentException(arg + ": " + val); return (short) val; }
@Override publicbooleanequals(Object o) { if (o == this) returntrue; if (!(o instanceof PhoneNumber)) returnfalse; PhoneNumberpn= (PhoneNumber) o; return pn.lineNum == lineNum && pn.prefix == prefix && pn.areaCode == areaCode; }
@Override publicinthashCode() { intresult= Short.hashCode(areaCode); result = 31 * result + Short.hashCode(prefix); result = 31 * result + Short.hashCode(lineNum); return result; }
/** * 이 전화번호의 문자열 표현을 반환한다. * 이 문자열은 "XXX-YYY-ZZZZ" 형태의 12글자로 구성된다. * XXX는 지역 코드, YYY는 프리픽스, ZZZZ는 가입자 번호다. * 각각의 대문자는 10진수 숫자 하나를 나타낸다. * <p> * 전화번호의 각 부분의 값이 너무 작아서 자릿수를 채울 수 없다면, * 앞에서부터 0으로 채워나간다. 예컨대 가입자 번호가 123이라면 * 전화번호의 마지막 네 문자는 "0123"이 된다. */ @Override public String toString() { return String.format("%03d-%03d-%04d", areaCode, prefix, lineNum); }
// 코드 14-3 비교자 생성 메서드를 활용한 비교자 (92쪽) privatestaticfinal Comparator<PhoneNumber> COMPARATOR = comparingInt((PhoneNumber pn) -> pn.areaCode) .thenComparingInt(pn -> pn.prefix) .thenComparingInt(pn -> pn.lineNum);