アイテムシーケンスメソッドではなくインスタンスフィールドの使用


アイテムシーケンスメソッドではなくインスタンスフィールドの使用
  • のほとんどの列挙型定数は、整数値に順次対応する.
  • すべての列挙タイプは、その列挙タイプの定数の数番目のビットを返す方法を提供する.
  • シーケンスを誤って使用した例-真似しないで!
    public enum Ensemble {
        SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET;
    
        public int numberOfMusicians() {
            return ordinal() + 1;
        }
    }
  • 定数宣言の順序を変えた瞬間、数字OfMusiciansが誤動作します.
  • 使用済み整数
  • の値と同じ定数を追加できません.また、価格は半額ではありません.
  • シーケンスを使用しないでください.
  • に接続された列挙タイプ定数の値は、シーケンス法では得られず、インスタンスフィールドに保存されます.
  • 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ドキュメントにはこう書かれているそうです.
    「ほとんどのプログラマはこのメソッドを使用する必要はありません.このメソッドは、EnumSetやEnumMapなどの列挙タイプに基づく汎用データ構造に使用することを目的としています.」
    すなわち,上記の用途でなければ,決して序数法を用いない.