max) { throw new IllegalArgumentException(arg + ": " + val); } return (short) val; } @Override public boolean equals(Object obj) { if (obj == this) return true; if (!(obj instanceof PhoneNumber)) return false; PhoneNumber pn = (PhoneNumber) obj; return pn.lineNum == this.lineNum && pn.prefix == this.prefix && pn.areaCode == this.areaCode; } @Override public int hashCode() { int result = Short.hashCode(areaCode); resul"> max) { throw new IllegalArgumentException(arg + ": " + val); } return (short) val; } @Override public boolean equals(Object obj) { if (obj == this) return true; if (!(obj instanceof PhoneNumber)) return false; PhoneNumber pn = (PhoneNumber) obj; return pn.lineNum == this.lineNum && pn.prefix == this.prefix && pn.areaCode == this.areaCode; } @Override public int hashCode() { int result = Short.hashCode(areaCode); resul"> max) { throw new IllegalArgumentException(arg + ": " + val); } return (short) val; } @Override public boolean equals(Object obj) { if (obj == this) return true; if (!(obj instanceof PhoneNumber)) return false; PhoneNumber pn = (PhoneNumber) obj; return pn.lineNum == this.lineNum && pn.prefix == this.prefix && pn.areaCode == this.areaCode; } @Override public int hashCode() { int result = Short.hashCode(areaCode); resul">
package item10;
public final class PhoneNumber {
private final short areaCode, prefix, lineNum;
public PhoneNumber(int areaCode, int prefix, int lineNum) {
this.areaCode =rangeCheck(areaCode, 999, "지역코드");
this.prefix =rangeCheck(prefix, 999, "프리픽스");
this.lineNum =rangeCheck(prefix, 9999, "가입자 번호");
}
private static short rangeCheck(int val, int max, String arg) {
if (val < 0 || val > max) {
throw new IllegalArgumentException(arg + ": " + val);
}
return (short) val;
}
@Override
public boolean equals(Object obj) {
if (obj == this)
return true;
if (!(obj instanceof PhoneNumber))
return false;
PhoneNumber pn = (PhoneNumber) obj;
return pn.lineNum == this.lineNum && pn.prefix == this.prefix &&
pn.areaCode == this.areaCode;
}
@Override
public int hashCode() {
int result = Short.hashCode(areaCode);
result = 31 * result + Short.hashCode(prefix);
result = 31 * result + Short.hashCode(lineNum);
return result;
}
/**
*이 전화번호의 문자열 표현을 반환한다.
*이 문자열은"XXX-YYY-ZZZ"형태의12글자로 구성된다.
* XXX는 지역코드, YYY는 프리픽스, ZZZZ는 가입자 번호다.
*각각의 대문자는10진수 숫자 하나를 나타낸다.
*
*전화번호의 각 부분의 값이 너무 작아서 자릿수를 채울 수 없다면,
*앞에서부터0으로 채워나간다.예컨대 가입자 번호가123이라면
*전화번호의 마지막 네 문자는"0123"이 된다.
*/
@Override
public String toString() {
return String.format("%03d-%03d-%04d", areaCode, prefix, lineNum);
}
}