zoukankan      html  css  js  c++  java
  • 第31条:用实例域代替序数

    枚举天生域一个单独的int值关联,根据枚举常量在类型中的数字位置,从0开始计数。所有枚举都有一个ordinal方法,返回每个枚举常量在类型中的数字位置。

    大多数程序不需要这个方法,它是被设计成用于像EnumSet和EnumMap这种基于枚举的通用数据结构的。

    不要根据枚举的序数导出与它相关联的值,而是将它保存在一个实例域中。

    public enum Ensemble {
        SOLO, DUET, TRIO, QUARTET, QUINTET,
        SEXTET, SEPTET, OCTET, NONET, DECTET;
        public int numberOfMusicians() {
            return ordinal() + 1;
        }
    }

    这个枚举表示不同数量音乐家。如果枚举常量被重新排序,或者增加一个与之前相同数量音乐家的枚举常量,没办法实现。

    修改成:

    public enum Ensemble {
        SOLO(1), DUET(2). TRIO(3), QUARTET(4),
        ...;
        
        private final int numberOfMusicians;
        Ensemble(int n) {
            numberOfMusicians = n;
        }
    }

    使用实例域numberOfMusicians来保存音乐家的数量。

  • 相关阅读:
    uva 11728 Alternate Task
    uvalive 5009 Error Curves
    uva 10341 Solve It
    uva 10870 Recurrences
    uva 11021 Tribbles
    17年9月6日
    React实践相关
    React:Refs and DOM
    React:propTypes
    React:JSX 深入
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5729669.html
Copyright © 2011-2022 走看看