열거 타입 상수는 하나의 정숫값에 대응된다.
그리고 열거 타입은 해당 상수가 몇 번째 위치인지를 반환하는 ordinal 메서드를 제공한다.
public enum Ensemble {
SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET;
public int numberOfMusicians() {
return ordinal() + 1;
}
}
출력
문제
새로운 상수를 추가하거나 순서가 변경된다면 numberOfMusicians
은 오동작한다.
결국 유지보수하기가 끔찍하다.
해결
열거 타입 상수에 연결된 값은 ordinal 메서드로 얻지말고, 인스턴스 필드에 저장하자
public enum Ensemble {
SOLO(1), DUET(2), TRIO(3),
QUARTET(4), QUINTET(5), SEXTET(6),
SEPTET(7), OCTET(8), DOUBLE_QUARTET(8),
NONET(9), DECTET(10), TRIPLE_QUARTET(12);
private final int numberOfMusicians;
Ensemble(int numberOfMusicians) {
this.numberOfMusicians = numberOfMusicians;
}
public int numberOfMusicians() {
return numberOfMusicians;
}
}
Enum API 문서에 ordinal에 대해 이렇게 쓰여있다
대부분의 프로그래머는 이 메서드를 쓸 일이 없다고…