enumは単一のint値と関連付けられる(ordinalメソッドで取得できる)
public enum Ensemble{
SOLO, DUET, TRIO, QUARTET, QUINTET,
SEXTET, SEPTET, OCTET, NONET, DECTET;
public int numberOfMusicians() { return ordinal() + 1; }
}
これは保守に関しては__✝悪夢✝__
- 定数が並び替えられたら機能しない
- 使用済みのint値に関連するenum定数を追加できない
- 任意のint値に対応する定数を追加できない ** 上の例にtriple quartetを追加したいと思ったら…?
インスタンスフィールドを使うこと。
public enum Ensemble{
SOLO(1), DUET(2), TRIO(3), QUARTET(4),
TRIPLE_QUARTET(12);
private final int numberOfMusicians;
Ensemble(int size) { this.numberOfMusicians = size; }
public int numberOfMusicians() { return numberOfMusicians; }
}
ordinalは普通使わない。 EnumSetとかEnumMapなどの汎用のenumに基づくデータ構造が使う。