1. 程式人生 > 實用技巧 >列舉--讓盜版美國總統wcc給你整明白哈哈

列舉--讓盜版美國總統wcc給你整明白哈哈

為什麼要有列舉

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枚舉出來了,接下來我們看下怎麼使用,以及它的原理。

Enum定義和常用方法