列舉--讓盜版美國總統wcc給你整明白哈哈
阿新 • • 發佈:2020-11-05
為什麼要有列舉
Java中的列舉其實是一種語法糖,在 JDK 1.5之後出現,用來表示固定且有限個的物件。比如一個季節類有春、夏、秋、冬四個物件;一個星期有星期一到星期日七個物件。這些明顯都是固定的,且有限個。那jdk5之前如果想表示有限個物件,程式碼是怎麼寫的嘞?這樣寫有什麼缺點,最終讓jdk官方人員(大部分是美國人)看不下去了吶,我這裡給大家舉一個2020火熱的事件,來體會,話不多說,我wcc直接上程式碼:
package com.huawei.subtitle.portal.com; /* 為什麼需要Enum */ public class AmericanFamily { public static final String bigSon = "特朗普"; public static final String smallSon = "拜登"; public static final String daughter = "奧巴馬"; //public static final String daughter = "羅斯福"; public static void main(String[] args) { String person = "拜登"; ourPresident(person); System.out.println("--------------------"); String chineseBoyWccNickName = "特朗普"; ourPresident(chineseBoyWccNickName); System.out.println("你看到了,我是中國小子wcc,可不是AmericanFamily成員"); } public static void ourPresident(String person) { if (AmericanFamily.bigSon.equals(person)) { System.out.println(" our president 川建國,2020 我挺你"); } if (AmericanFamily.smallSon.equals(person)) { System.out.println(" our president 拜登"); } if (AmericanFamily.daughter.equals(person)) { System.out.println(" our president 奧巴馬"); } /* 如果上面定義了常量羅斯福,這裡就要增加個if'判斷',也就是就要改程式碼哈 if (AmericanFamily.daughter.equals(person)) { System.out.println(" our president 奧巴馬"); } */ } }
大家看到了吧,結果竟然是中國小子wcc因為暱稱叫特朗普
,當美國人將我進行校驗的時候,得到的結果是這是美國總統特朗普哈哈。於是jdk官網人員開始反思,我目前主要是看出了2點:
- 美國人肯定不幹呀最後,jdk官方這些人更是看不下去,這驗證方式不對呀,這傢伙都不會美國人,這也通過了校驗。這不行,我得把型別也得校驗住了,最好在編譯期就提示這個有問題,冒牌貨
- 這個程式碼寫的不好呀,隨著時間的更替,美國總統族譜上的人越來越多,每次增加了常量,ourPresident()這個方法就要增加判斷邏輯,這程式碼水呀,我可是jdk官方,這得改。
為了讓編譯器能自動檢查某個值在列舉的集合內,並且,不同用途的列舉需要不同的型別來標記,不能混用,我們可以使用enum來定義列舉類,於是終於在jdk1.5版本,Enum枚舉出來了,接下來我們看下怎麼使用,以及它的原理。