Java基礎 (6) - 枚舉

能解決
1.類或方法強制使用者傳入預設的值
2.性能相對常量更好 - (Android環境除外)html

使用辦法
public enum ColorEnum{
WHITE("0x000001"),BLACK("0x000002"),GREEN("0x000003");
private final String color;
private ColorEnum(String color){
this.color = color;
}ide

public String getColor() {
    return color;
}

 public void setColor(String color) {
 this.color = color;
}

}性能

和類的區別
枚舉是真正的 final,客戶端不容許建立枚舉類的實例,也不能對其進行拓展
public class Color {
public static final Color WHITE = new Color(),
BLACK = new Color(),
GREEN = new Color();
private Color() { }
} 優化

和常量的區別
1) 沒法限制開發員繼承/實現接口. (枚舉是final的構造方法是私有的)
2) 常量做爲參數時,是String,int等弱類型,開發員傳入沒有在常量接口裏定義的值,這個問題沒法經過編譯器發現.
(常量沒法 限制開發人員傳入的參數數值,而枚舉能夠在編譯階段強制要求開發人員傳入規定數值)
3) 因爲開發員能夠直接寫常量值, 因此不能用==對比,只能用equals對比,不能優化性能
(枚舉 equals 也會轉化爲 == 可參考 https://www.cnblogs.com/xiohao/p/7405423.html
4) 編譯時,是直接把常量的值編譯到類的二進制代碼裏,常量的值在升級中變化後,須要從新編譯全部引用常量的類,由於裏面存的是舊值. (常量是裝載的時候放入堆裏,若是發生變化,須要從新編譯裝載)this

參考:
http://www.javashuo.com/article/p-mpgmmbms-kc.html
https://blog.csdn.net/lishuangling21/article/details/71398925
https://blog.csdn.net/hzy38324/article/details/72566678
Android中枚舉狀況:
https://www.cnblogs.com/zgz345/p/5871351.html
Android中枚舉替代方案
https://www.jianshu.com/p/f8ac84a3e3c1.net

相關文章
相關標籤/搜索