Effective Java之用enum代替int常量(三十)
1.Int枚舉常量
public class mytest {public static final int num_one = 1;public static final int num_two = 2;public static final int num_three = 3;public static final int char_A = 1;public static final int char_B = 2;public static final int char_C = 3; }這種方法叫做int枚舉模式,缺點:
1.類型安全性不能保證,num和char兩種不同的東西,兩者可以相互傳參,互相對比,不符合我們的常識。
2.要打印出來值的之后,得到的就只有一個數字,沒什么作用。
3.想要遍歷同一組的常量,或者求出這一組常量的數目,沒什么好的方法。
4.如果是String枚舉模式,把字符串硬編碼到客戶端代碼中,一旦出現書寫錯誤,將難以發現。
2.enum枚舉常量
public enum Number {one(1),two(2),three(3);private final int i;private Number(int k) {i=k;}@Overridepublic String toString() {return "我的值是" +i;} }首先介紹一下枚舉類的原理:
1.枚舉就是通過公有的靜態final域為每個枚舉類型導出實例的類。如例子中的one,two,three;
2.它的訪問器必須是private的,所以它是真正的final,也就是說它無法創建實例,無法擴展,所以說它是實例受控的。
枚舉類的相比int枚舉優點:
1.保證類型安全,傳參必須保證類型一致,同時不同的枚舉用“==”比較會編譯錯誤。
2.可以重寫toString方法,得到想要的字符串。
3.可以用枚舉的values方法遍歷所以枚舉常量
上面的三點都是完善int枚舉類型,還有它還提供和很多高級特性:
4.枚舉類型允許添加任意的方法和域,由于它繼承了Enum,所以它不支持繼承,它只能實現接口。
5.它實現了Comparable和Seriazable,所以它支持比較和序列化。這也是它是單例模式的最佳選擇之一的原因。
注意:由于枚舉天生是不可變的,所以它的所有域都應該聲明成final,為了封裝型,最好聲明成private。
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的Effective Java之用enum代替int常量(三十)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Effective Java之利用有限制
- 下一篇: Effective Java之用实例域代