java中枚舉(enum)常見的7種用法

在JDK1.5之前啄寡,JAVA可以有兩種方式定義新類型:類和接口拾弃,對于大部分面向對象編程讯檐,有這兩種似乎就足夠了羡疗,但是在一些特殊情況就不合適。例如:想要定義一個Color類别洪,它只能有Red,Green,Blue三種叨恨,其他值則是錯誤,在JDK1.5之后便引入枚舉類型挖垛。

用法一:常量

在JDK1.5 之前痒钝,我們定義常量都是: public static fianl…. ,枚舉可以將相關的常量分組到一個枚舉類型里,而且枚舉提供了比常量更多的方法晕换。

public enum Color {  
  RED, GREEN, BLANK, YELLOW  
}  
Color c = Color.BLUE ;        // 取出藍色
System.out.println(c) ;

用法二:switch

JDK1.5起switch語句支持Enum枚舉值午乓,使用枚舉站宗,能讓我們的代碼可讀性更強闸准。

public class SwitchEnum {
    Color color = Color.RED;
    public void change() {
        switch (color) {
            case RED:
                color = Color.GREEN;
                break;
            case YELLOW:
                color = Color.RED;
                break;
            case GREEN:
                color = Color.YELLOW;
                break;
        }
    }
}

用法三:向枚舉中添加新方法

public enum Color {  
    RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);  
    // 成員變量  
    private String name;  
    private int index;  
    // 構造方法  
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
    // 普通方法  
    public static String getName(int index) {  
        for (Color c : Color.values()) {  
            if (c.getIndex() == index) {  
                return c.name;  
            }  
        }  
        return null;  
    }  
    // get set 方法  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public int getIndex() {  
        return index;  
    }  
    public void setIndex(int index) {  
        this.index = index;  
    }  
}  

用法四:覆蓋枚舉的方法

下面給出一個toString()方法覆蓋的例子。

public enum Color {  
    RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);  
    // 成員變量  
    private String name;  
    private int index;  
    // 構造方法  
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
    //覆蓋方法  ,可自定義返回
    @Override  
    public String toString() {  
        return this.index+"_"+this.name;  
    }  
}  

用法五:實現(xiàn)接口

所有的枚舉都繼承自java.lang.Enum類梢灭。由于Java 不支持多繼承夷家,所以枚舉對象不能再繼承其他類蒸其。

public interface Behaviour {  
    void print();  
    String getInfo();  
}  
public enum Color implements Behaviour{  
    RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);  
    // 成員變量  
    private String name;  
    private int index;  
    // 構造方法  
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
    //接口方法  
    @Override  
    public String getInfo() {  
        return this.name;  
    }  
    //接口方法  
    @Override  
    public void print() {  
        System.out.println(this.index+":"+this.name);  
    }  
}  

用法六:使用接口組織枚舉

public interface Food {  
    enum Coffee implements Food{  
        BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO  
    }  
    enum Dessert implements Food{  
        FRUIT, CAKE, GELATO  
    }  
}  

用法七:關于枚舉集合的使用

java.util.EnumSet和java.util.EnumMap是兩個枚舉集合。EnumSet保證集合中的元素不重復库快;EnumMap中的key是enum類型摸袁,而value則可以是任意類型。

  1. 使用EnumMap
import java.util.EnumMap ;
import java.util.Map ;
enum Color{
    RED , GREEN , BLUE ;
}
public class EnumMapDemo{
    public static void main(String args[]){
        Map<Color,String> desc = null ;        // 定義Map對象义屏,同時指定類型
        desc = new EnumMap<Color,String>(Color.class) ;    // 實例化EnumMap對象
        desc.put(Color.RED,"紅色") ;
        desc.put(Color.GREEN,"綠色") ;
        desc.put(Color.BLUE,"藍色") ;
        System.out.println("====== 輸出全部的內容 ======") ;
        for(Color c:Color.values()){
            System.out.println(c.name() + " --> " + desc.get(c)) ;
        }
        System.out.println("====== 輸出全部的鍵值 ======") ;
        for(Color c:desc.keySet()){
            System.out.print(c.name() + "靠汁、") ;
        }
        System.out.println() ;
        System.out.println("====== 輸出全部的內容 ======") ;
        for(String s:desc.values()){
            System.out.print(s + "、") ;
        }
    }
};
  1. 使用 EnumSet
import java.util.EnumSet ;
enum Color{
    RED , GREEN , BLUE ;
}
public class EnumSetDemo{
    public static void main(String args[]){
        EnumSet<Color> esOld = null ;            // 聲明一個EnumSet對象
        EnumSet<Color> esNew = null ;
        System.out.println("======== EnumSet.copyOf(Color.class) =====") ;
        esOld = EnumSet.noneOf(Color.class) ;    // 將枚舉的全部類型設置到EnumSet對象之中
        esOld.add(Color.RED) ;    // 增加內容
        esOld.add(Color.GREEN) ;    // 增加內容
        esNew = EnumSet.copyOf(esOld) ;    // 從已有的集合拷貝過來
        print(esNew) ;
    }
    public static void print(EnumSet<Color> temp){    // 專門的輸出操作
        for(Color c:temp){        //  循環(huán)輸出EnumSet中的內容
            System.out.print(c + "闽铐、") ;
        }
        System.out.println() ;
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蝶怔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子兄墅,更是在濱河造成了極大的恐慌踢星,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隙咸,死亡現(xiàn)場離奇詭異沐悦,居然都是意外死亡,警方通過查閱死者的電腦和手機五督,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門藏否,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人充包,你說我怎么就攤上這事秕岛。” “怎么了误证?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵继薛,是天一觀的道長。 經常有香客問我愈捅,道長遏考,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任蓝谨,我火速辦了婚禮灌具,結果婚禮上,老公的妹妹穿的比我還像新娘譬巫。我一直安慰自己咖楣,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布芦昔。 她就那樣靜靜地躺著诱贿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上珠十,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天料扰,我揣著相機與錄音,去河邊找鬼焙蹭。 笑死晒杈,一個胖子當著我的面吹牛,可吹牛的內容都是我干的孔厉。 我是一名探鬼主播拯钻,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撰豺!你這毒婦竟也來了说庭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤郑趁,失蹤者是張志新(化名)和其女友劉穎刊驴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寡润,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡捆憎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了梭纹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躲惰。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖变抽,靈堂內的尸體忽然破棺而出础拨,到底是詐尸還是另有隱情,我是刑警寧澤绍载,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布诡宗,位于F島的核電站,受9級特大地震影響击儡,放射性物質發(fā)生泄漏塔沃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一阳谍、第九天 我趴在偏房一處隱蔽的房頂上張望蛀柴。 院中可真熱鬧,春花似錦矫夯、人聲如沸鸽疾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽制肮。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弄企,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工区拳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拘领,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓樱调,卻偏偏與公主長得像约素,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子笆凌,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法圣猎,類相關的語法,內部類的語法乞而,繼承相關的語法送悔,異常的語法,線程的語...
    子非魚_t_閱讀 31,587評論 18 399
  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光劍書架上的書閱讀 3,856評論 2 8
  • 一 Java 枚舉7常見種用法DK1.5引入了新的類型——枚舉爪模。在 Java 中它雖然算個“小”功能欠啤,卻給我的開發(fā)...
    歡樂時光歡樂你我閱讀 861評論 0 6
  • 本文包括:枚舉由來如何使用?枚舉類特性單例設計模式定義特殊結構枚舉星期輸出中文的案例枚舉類API 枚舉(enum)...
    廖少少閱讀 2,840評論 2 14
  • 01 他就是個騙子屋灌! 她咬牙切齒地想洁段,覺得自己恍然大悟,為時未晚共郭,應該值得慶幸祠丝,可偏偏有種難以名狀的失落感涌上心頭...
    傳奇0124閱讀 416評論 0 0