30:用enum代替int常量
当需要一组固定常量的时候,应该使用enum代替int常量,除了对于手机登资源有限的设备应该酌情考虑enum的性能弱势之外。
31:用实例域代替序数
应该给enum添加int域,而不是使用ordinal方法来导出与枚举关联的序数值。(几乎不应使用ordinal方法,除非在编写像EnumMap这样的基于枚举的通用数据结构)
//WRONG public enum Fruit{ APPLE, PEAR, ORANGE; public int numberOfFruit(){ return ordinal() + 1; } } //RIGHT public enum Fruit{ APPLE(1), PEAR(2), ORANGE(3); private final int number; Fruit(int num) {number = num;} public int numberOfFruit(){ return number; } }
32:用EnumSet代替位域
EnumSet的内容都表示为位矢量。如若底层的枚举类型个数小于64个,则整个EnumSet就用单个long来表示,因此性能上比的上位域。
//WRONG public class Text{ private static final int STYLE_BOLD = 1 << 0; private static final int STYLE_ITALIC = 1 << 1; private static final int STYLE_UNDERLINE = 1 << 2; public void applyStyles(int styles) {...} } //use text.applyStyles(STYLE_BOLD | STYLE_ITALIC); //RIGHT public class Text{ public enum Style{STYLE_BOLD, STYLE_ITALIC, STYLE_UNDERLINE} public void applyStyles(Set