美文网首页
[Effective Java] Item 31: Use in

[Effective Java] Item 31: Use in

作者: YoungJadeStone | 来源:发表于2019-06-24 07:02 被阅读0次

    所有的enum都有一个ordinal方法,它返回每个enum在类型中的数字位置:

    // Abuse of ordinal to derive an associated value - DON'T DO THIS
    public enum Ensemble {
        SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET;
    
        public int numberOfMusicians() {
            return ordinal() + 1;
        }
    }
    

    这个枚举方法非常不好维护。如果常量进行重新排序,numberOfMusicians就会遭到破坏。

    替代方法是:将枚举的关联值存在一个实例域中:

    public enum Ensemble {
        SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5), SEXTET(6), SEPTET(7), OCTET(8), NONET(9), DECTET(10), TRIPLE_QUARTET(12);
    
        private final int numberOfMusicians;
        Ensemble(int size) {
            this.numberOfMusicians = size;
        }
        public int numberOfMusicians() {
            return numberOfMusicians;
        }
    }
    

    除非自己编写一些数据结构,否则最好不要使用ordinal方法。

    相关文章

      网友评论

          本文标题:[Effective Java] Item 31: Use in

          本文链接:https://www.haomeiwen.com/subject/bhvgqctx.html