1 枚舉提供了類型安全檢測
2 枚舉隔離了使用的類和枚舉類型,使增加和重排無需重新編譯
3 本質(zhì)上是單元素枚舉,final類型,不支持?jǐn)U展(繼承),但是可以自由使用接口和方法。
4 便于理解,維護(hù)
5 絕對安全的單例類型(相對于雙重鎖,無法被反序列化創(chuàng)造多個實例)
1 手機內(nèi)存資源有限,ENUM將會增大最終的DEX文件,大約是Integer常量的13倍,大量使用會影響程序性能。
2 虛擬機加載枚舉類,并且實例化所有的枚舉項,并且這些枚舉實例的內(nèi)存無法回收,而且枚舉是單例,如果自定義的枚舉類中包含了大塊內(nèi)存的引用,也可能會帶來內(nèi)存泄露。
永遠(yuǎn)不要根據(jù)枚舉的序數(shù)導(dǎo)出與它關(guān)聯(lián)的值(ordinal()方法雖然從0開始,但是當(dāng)常量重排序時會混亂),而是要將它保存在一個實例域中:
public enum Ensemble {
SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5),
private final int numberOfMusicians;
Ensemble(int size ) { this.numberOfMusicians = size; }
public int numberOfMusicians() { return numberOfMusicians;}
}
位域:text.applyStyles(STYLE_BOLD | STYLE_ITALIC);
位域表示的缺陷:位域以數(shù)字形式打印時,翻譯位域比翻譯簡單的int枚舉常量要困難得多;要遍歷位域表示的所有元素也沒有很容易的方法。
EnumSet:
public class Text {
public enum Style {BOLD , ITALIC , UNDERLINE , STRIKETHROUGH}
// Any Set could be passed in , but EnumSet is clearly best
public void applyStyles(Set