第34条:用 enum 代替 int 常量
用枚举的情况一般都是某个类别的常量。比如星期、月份、颜色等等。
第35条:用实例域代替序数索引
枚举虽然自带 ordinal 方法,并且从0开始,但是应避免使用这个方法。当需要类似参数,定义一个参数即可。
第36条:用 EnumSet 代替位域
用 OR 位运算将几个常量合并到一个集合中,称作位域(bit field)。比如:常量 | 常量 | 常量...,也就是并集
- 规律性的常量本身可以用枚举来列举
- EnumSet 内部具体实现上,每个元素都表示为位矢量。Set 集合的一些操作 add、remove 等,都是利用位运算来实现的
- 所以建议用 EnumSet 代替位域,以避免手写产生的BUG
第37条:用 EnumMap 代替序数索引
避免把枚举 ordinal 值当数组角标。当注意到第35条,也就不会发生本条的情况了。
第38条:用接口模拟可扩展的枚举
当枚举可能被扩展时,请定义一个接口,就可以有多个实现类。
第39条:注解优先于命名模式
避免使用前缀匹配方式,优先使用注解。
第40条:坚持使用 Override 注解
IDE一般都会提示,有时候会避免一些方法覆盖错误。
第41条:用标记接口定义类型
标记接口是不包含方法声明的接口,实现这类接口,说明类拥有接口标记的功能。比如序列化接口:Serializable