亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java枚舉類型enum的使用

2019-11-06 06:48:59
字體:
來源:轉載
供稿:網友

java枚舉類型enum的使用

最近跟同事討論問題的時候,突然同事提到我們為什么java中定義的常量值不采用enmu枚舉類型,而采用public final static 類型來定義呢?以前我們都是采用這種方式定義的,很少采用enum定義,所以也都沒有注意過,面對突入起來的問題,還真有點不太清楚為什么有這樣的定義。既然不明白就抽時間研究下吧。

Java中的枚舉類型采用關鍵字enum來定義,從jdk1.5才有的新類型,所有的枚舉類型都是繼承自Enum類型。要了解枚舉類型,建議大家先打開jdk中的Enum類簡單讀一下,這個類里面定義了很多PRotected方法,比如構造函數,如果要使用這些方法我們可以把枚舉類型定義到當前類中。每個枚舉類型,都有自己的名字和順序,當我們輸出一個枚舉類型的時候,會輸入枚舉類型的name,具體可以參考下面的例子。

一、   通常定義常量方法

我們通常利用public final static方法定義的代碼如下,分別用1表示紅燈,3表示綠燈,2表示黃燈。

package com.csdn.myEnum;

publicclass Light {

    /*紅燈*/

    publicfinalstaticintRED=1;

    /*綠燈*/

    publicfinalstaticintGREEN=3;

    /*黃燈*/

    publicfinalstaticintYELLOW=2;

}

 

二、   枚舉類型定義常量方法

枚舉類型的簡單定義方法如下,我們似乎沒辦法定義每個枚舉類型的值。比如我們定義紅燈、綠燈和黃燈的代碼可能如下:

publicenum Light {

       RED,GREEN,YELLOW;

}

我們只能夠表示出紅燈、綠燈和黃燈,但是具體的值我們沒辦法表示出來。別急,既然枚舉類型提供了構造函數,我們可以通過構造函數和覆寫toString方法來實現。首先給Light枚舉類型增加構造方法,然后每個枚舉類型的值通過構造函數傳入對應的參數,同時覆寫toString方法,在該方法中返回從構造函數中傳入的參數,改造后的代碼如下:

publicenum Light {

       //利用構造函數傳參

       RED(1),GREEN(3),YELLOW(2);

 

       //定義私有變量

       privateintnCode;

 

       //構造函數,枚舉類型只能為私有

       private Light(int _nCode) {

           this.nCode = _nCode;

       }

 

       @Override

       public String toString() {

           return String.valueOf(this.nCode);

       }

    }

 

三、   完整示例代碼

枚舉類型的完整演示代碼如下:

package com.csdn.myEnum;

 

import java.util.EnumMap;

import java.util.EnumSet;

 

publicclass LightTest {

 

    // 1.定義枚舉類型

    publicenum Light {

       //利用構造函數傳參

       RED(1),GREEN(3),YELLOW(2);

 

       //定義私有變量

       privateintnCode;

 

       //構造函數,枚舉類型只能為私有

       private Light(int _nCode) {

           this.nCode = _nCode;

       }

 

       @Override

       public String toString() {

           return String.valueOf(this.nCode);

       }

    }

 

    /**

     *@paramargs

     */

    publicstaticvoid main(String[]args) {

 

       // 1.遍歷枚舉類型

       System.out.println("演示枚舉類型的遍歷 ......");

       testTraversalEnum();

 

       // 2.演示EnumMap對象的使用

       System.out.println("演示EnmuMap對象的使用和遍歷.....");

       testEnumMap();

 

       // 3.演示EnmuSet的使用

       System.out.println("演示EnmuSet對象的使用和遍歷.....");

       testEnumSet();

    }

 

    /**

     *演示枚舉類型的遍歷

     */

    privatestaticvoid testTraversalEnum() {

       Light[] allLight = Light.values();

       for (Light aLight : allLight) {

           System.out.println("當前燈name:" + aLight.name());

           System.out.println("當前燈ordinal:" + aLight.ordinal());

           System.out.println("當前燈:" + aLight);

       }

    }

 

    /**

     *演示EnumMap的使用,EnumMap跟HashMap的使用差不多,只不過key要是枚舉類型

     */

    privatestaticvoid testEnumMap() {

       // 1.演示定義EnumMap對象,EnumMap對象的構造函數需要參數傳入,默認是key的類的類型

       EnumMap<Light, String> currEnumMap =new EnumMap<Light, String>(

              Light.class);

       currEnumMap.put(Light.RED,"紅燈");

       currEnumMap.put(Light.GREEN,"綠燈");

       currEnumMap.put(Light.YELLOW,"黃燈");

 

       // 2.遍歷對象

       for (Light aLight : Light.values()) {

           System.out.println("[key=" + aLight.name() +",value="

                  + currEnumMap.get(aLight) +"]");

       }

    }

 

    /**

     *演示EnumSet如何使用,EnumSet是一個抽象類,獲取一個類型的枚舉類型內容<BR/>

     *可以使用allOf方法

     */

    privatestaticvoid testEnumSet() {

       EnumSet<Light> currEnumSet = EnumSet.allOf(Light.class);

       for (Light aLightSetElement : currEnumSet) {

           System.out.println("當前EnumSet中數據為:" + aLightSetElement);

       }

 

    }

}

 

 

執行結果如下:

演示枚舉類型的遍歷 ......

當前燈name:RED

當前燈ordinal:0

當前燈:1

當前燈name:GREEN

當前燈ordinal:1

當前燈:3

當前燈name:YELLOW

當前燈ordinal:2

當前燈:2

演示EnmuMap對象的使用和遍歷.....

[key=RED,value=紅燈]

[key=GREEN,value=綠燈]

[key=YELLOW,value=黃燈]

演示EnmuSet對象的使用和遍歷.....

當前EnumSet中數據為:1

當前EnumSet中數據為:3

當前EnumSet中數據為:2

 

 

四、   通常定義常量方法和枚舉定義常量方法區別

以下內容可能有些無聊,但絕對值得一窺

1.   代碼:

public class State {

public static final int ON = 1;

public static final Int OFF= 0;

}

 

有什么不好了,大家都這樣用了很長時間了,沒什么問題啊。

首先,它不是類型安全的。你必須確保是int

其次,你還要確保它的范圍是0和1

最后,很多時候你打印出來的時候,你只看到 1 和0 ,

 

但其沒有看到代碼的人并不知道你的企圖,拋棄你所有舊的public static final常量吧

 

2.   可以創建一個enum類,把它看做一個普通的類。除了它不能繼承其他類了。(java是單繼承,它已經繼承了Enum),

可以添加其他方法,覆蓋它本身的方法

3.   switch()參數可以使用enum了

 

4.   values()方法是編譯器插入到enum定義中的static方法,所以,當你將enum實例向上轉型為父類Enum是,values()就不可訪問了。解決辦法:在Class中有一個getEnumConstants()方法,所以即便Enum接口中沒有values()方法,我們仍然可以通過Class對象取得所有的enum實例

 

5.   無法從enum繼承子類,如果需要擴展enum中的元素,在一個接口的內部,創建實現該接口的枚舉,以此將元素進行分組。達到將枚舉元素進行分組。

 

6.   使用EnumSet代替標志。enum要求其成員都是唯一的,但是enum中不能刪除添加元素。

 

7.   EnumMap的key是enum,value是任何其他Object對象。

 

8.   enum允許程序員為eunm實例編寫方法。所以可以為每個enum實例賦予各自不同的行為。

 

9.   使用enum的職責鏈(Chain of Responsibility) .這個關系到設計模式的職責鏈模式。以多種不同的方法來解決一個問題。然后將他們鏈接在一起。當一個請求到來時,遍歷這個鏈,直到鏈中的某個解決方案能夠處理該請求。

 

10.  使用enum的狀態機

 

11.  使用enum多路分發

原文轉自于: http://blog.csdn.net/wgw335363240/article/details/6359614


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内精品久久久久影院 日本资源| 欧美亚洲免费电影| 91免费国产视频| 2019精品视频| 久久久久久久久久久免费| 日本欧美一级片| 国产亚洲日本欧美韩国| 亚洲欧美在线一区| 国产精品白嫩初高中害羞小美女| 91视频88av| 81精品国产乱码久久久久久| 久久久久久国产精品久久| 51午夜精品视频| 91老司机在线| 欧美极品少妇xxxxⅹ免费视频| 日韩中文字幕在线播放| 91免费国产网站| 亚洲直播在线一区| 午夜免费日韩视频| 亚洲人成啪啪网站| 亚洲一区二区三区视频| 国产精品亚洲自拍| 美女黄色丝袜一区| 久久视频在线直播| 91chinesevideo永久地址| 亚洲欧美国产精品专区久久| 亚洲伊人久久综合| 久久久久久久久久亚洲| 欧美性极品xxxx做受| 欧美放荡办公室videos4k| 九九视频这里只有精品| 国产精品美女免费视频| 亚洲成人精品视频在线观看| 成人天堂噜噜噜| 日韩中文字在线| 夜夜嗨av一区二区三区免费区| 91爱视频在线| 欧美激情一区二区三区高清视频| 成人性生交大片免费观看嘿嘿视频| 国产精品av网站| 欧美日韩亚洲精品内裤| 91在线观看免费网站| 欧美专区中文字幕| 在线观看亚洲区| 精品视频—区二区三区免费| 久久91亚洲精品中文字幕奶水| 一区二区三区视频免费在线观看| 国模私拍视频一区| 91精品国产乱码久久久久久蜜臀| 国产精品igao视频| 国产精品大陆在线观看| 91免费看片在线| 97超碰国产精品女人人人爽| 日韩av电影手机在线| 黄色成人在线播放| 国产在线精品播放| 欧美日韩精品中文字幕| 57pao精品| 亚洲国产精品99久久| 成人黄色免费在线观看| 久久69精品久久久久久国产越南| 国外成人在线直播| 国产va免费精品高清在线观看| 亚洲男人天堂手机在线| 亚洲欧美激情另类校园| 色悠悠久久久久| 欧美一区二区三区图| 国产精品视频中文字幕91| 日韩电影视频免费| 日韩中文字幕在线免费观看| 日韩精品中文字幕在线| 国产成人在线视频| 亚洲美女黄色片| 97视频在线观看成人| 久久久久久久久久国产精品| 国产区精品视频| 久久av资源网站| 成人动漫网站在线观看| 日韩av在线网| 亚洲免费av片| 日韩欧美一区二区在线| 欧美日韩在线第一页| 亚洲人成电影网站色xx| 久久91亚洲精品中文字幕奶水| 亚洲欧美一区二区三区四区| 国产精品影片在线观看| 91亚洲精品视频| 欧美高清一级大片| 日韩亚洲一区二区| 97成人在线视频| 日韩日本欧美亚洲| 不卡av在线网站| 最近中文字幕mv在线一区二区三区四区| 色爱av美腿丝袜综合粉嫩av| 成人黄色影片在线| 97久久精品人人澡人人爽缅北| 亚洲香蕉成视频在线观看| 国产精品永久免费| 国产中文欧美精品| 国产精品偷伦视频免费观看国产| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲a∨日韩av高清在线观看| 亚洲福利精品在线| 欧美裸体xxxx极品少妇软件| 久久综合久久美利坚合众国| 亚洲天堂av在线播放| 欧美日韩xxx| 91精品国产色综合久久不卡98| 国产午夜精品久久久| 欧美成人免费视频| 亚洲18私人小影院| 91精品成人久久| 久久99国产综合精品女同| 不卡在线观看电视剧完整版| 国产日韩欧美电影在线观看| 亚洲老板91色精品久久| 亚洲新声在线观看| 欧洲精品在线视频| 亚洲自拍偷拍网址| 国产精品久久国产精品99gif| 亚洲裸体xxxx| 国产精品视频永久免费播放| 日本最新高清不卡中文字幕| 亚洲成人aaa| 欧美精品在线第一页| 欧亚精品在线观看| 日产日韩在线亚洲欧美| 国产精品啪视频| 久久久精品亚洲| 亚洲欧美日韩国产中文| 欧美性猛交视频| 456国产精品| 欧美与黑人午夜性猛交久久久| 91系列在线播放| 国产精品欧美在线| 亚洲欧洲中文天堂| 另类少妇人与禽zozz0性伦| 欧美裸体xxxx| 欧美久久精品午夜青青大伊人| 国产欧美在线观看| 日韩高清免费观看| 久久综合免费视频| 奇米4444一区二区三区| 91久久久国产精品| 亚洲欧美综合v| 久久久久久亚洲精品| 国产精品久久久久9999| 中文字幕欧美视频在线| 日韩电视剧免费观看网站| 亚洲a∨日韩av高清在线观看| 欧美综合一区第一页| 国产精品亚洲综合天堂夜夜| 日本欧美精品在线| 国产精品日韩欧美大师| 日韩欧美在线视频日韩欧美在线视频| 亚洲天堂免费观看| 日韩精品中文字幕在线| 91色精品视频在线| 亚洲国产精品国自产拍av秋霞| 国产成人精品在线观看| 欧美极品少妇xxxxⅹ免费视频| 国产一区二区三区日韩欧美| 91亚洲va在线va天堂va国| 国产精品视频免费观看www|