ordinal 메서드
열거 타입은 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환하는 ordinal이라는 메서드를 제공한다.
public enum Ensemble {
SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET;
public int numberOfMusicians() {
return ordinal() + 1;
}
}
ordinal 메서드의 문제를 유지보수성에 있다.
- 상수 선언을 바꾸는 순간 numberOfMusicians가 오동작하며, 이미 사용중인 정수와 같이 값이 같은 상수는 추가할 수 없다.
- ordinal은 EnumSet과 EnumMap과 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었으므로 이런 용도가 아니라면 이 메서드는 절대 사용하면 안된다.
열거 타입 상수에 연결된 값은 인스턴스 필드에 저장하자.
public enum Ensemble {
SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET;
private final int numberOfMusicians;
Ensemble(int size) { this.numberOfMusicians = size; }
public int numberOfMusicians() { return numberOfMusicians; }
}