當前位置:成語大全網 - 書法字典 - Java枚舉類型

Java枚舉類型

使用java枚舉類型enum

最近和同事討論的時候,突然同事提到為什麽在java中不使用穆恩枚舉類型來定義常量值,而是使用public final靜態類型來定義它們。過去我們都是這樣定義的,很少用enum定義,所以沒有重視。面對突如其來的問題,我們真的不知道為什麽會有這樣的定義。既然妳不懂,那就花點時間研究壹下。

Java中的枚舉類型是由關鍵字enum定義的,所有枚舉類型都是從Enum類型繼承的,Enum類型只是jdk1.5中的新類型。為了理解枚舉類型,我建議您在jdk中打開enum類並簡單閱讀壹下。這個類中定義了許多受保護的方法,例如構造函數。如果我們想使用這些方法,我們可以在當前類中定義枚舉類型。每種枚舉類型都有自己的名稱和順序。當我們輸出壹個枚舉類型時,我們將輸入該枚舉類型的名稱。有關詳細信息,請參考以下示例。

壹、通常定義常數的方法

我們通常使用public final靜態方法來定義代碼,如下所示:1表示紅燈,3表示綠燈,2表示黃燈。

包com . csdn . myenum;

公共類燈{

/*紅燈*/

public final靜態int RED = 1;

/*綠燈*/

public final static int GREEN = 3;

/*黃燈*/

public final static int YELLOW = 2;

}

其次,枚舉類型定義了常量方法

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

公共枚舉燈{

紅色、綠色、黃色;

}

我們只能顯示紅燈、綠燈和黃燈,但無法顯示具體值。別擔心,由於枚舉類型提供了構造函數,我們可以通過構造函數和重寫toString方法來實現。首先將構造函數添加到Light枚舉類型中,然後通過構造函數將每個枚舉類型的值傳入相應的參數中,同時覆蓋toString方法,其中返回從構造函數傳入的參數。改革後的法典如下:

公共枚舉燈{

//使用構造函數傳遞參數

紅色(1)、綠色(3)、黃色(2);

//定義私有變量

private int nCode

//構造函數,枚舉類型只能是私有的。

專用燈(int _ nCode ){

這個。nCode = _ nCode

}

@覆蓋

公共字符串toString(){

返回string . value of(this。nCode);

}

}

第三,完整的示例代碼

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

包com . csdn . myenum;

導入Java . util . enum map;

導入Java . util . enum set;

公共類燈光測試{

// 1.定義枚舉類型

公共枚舉燈{

//使用構造函數傳遞參數

紅色(1)、綠色(3)、黃色(2);

//定義私有變量

private int nCode

//構造函數,枚舉類型只能是私有的。

專用燈(int _ nCode ){

這個。nCode = _ nCode

}

@覆蓋

公共字符串toString(){

返回string . value of(this。nCode);

}

}

/**

* @param args

*/

公共靜態void main(String【】args ){

// 1.遍歷枚舉類型

系統。出去。println(“演示枚舉類型的遍歷…”);

testTraversalEnum();

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

系統。出去。println(“演示EnmuMap對象的使用和遍歷。。。“);

testEnumMap();

// 3.演示如何使用EnmuSet

系統。出去。println(“演示EnmuSet對象的使用和遍歷。。。“);

testEnumSet();

}

/**

*演示枚舉類型的遍歷。

*/

私有靜態void testTraversalEnum(){

light【】all light = light . values();

對於(燈亮:全亮){

系統。出去。println(“當前燈名:“+align . name());

系統。出去。println(“當前燈序數:“+light . ordinal());

系統。出去。println(“當前燈:“+點亮“);

}

}

/**

*演示EnumMap的使用,它類似於HashMap的使用,只是鍵是枚舉類型。

*/

私有靜態void testEnumMap(){

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

EnumMap & lt燈,弦& gtcurrEnumMap = new EnumMap & lt燈,弦& gt(

光。類);

current map . put(Light。紅色,“紅燈”);

current map . put(Light。綠色,“綠燈”);

current map . put(Light。黃色,“黃燈”);

// 2.遍歷對象

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

系統。出去。println(“【key =“+light . name()+“,value=“

+current map . get(light)+“】““;

}

}

/**

*演示如何使用抽象類EnumSet獲取類型的枚舉類型內容

*您可以使用allOf方法。

*/

私有靜態void testenum set(){

EnumSet & lt光& gtcurrenum set = enum set . allof(Light。類);

for(lightsetelement:currEnumSet ){

系統。出去。println(“當前EnumSet中的數據為:“+aLightSetElement“);

}

}

}

實施結果如下:

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

當前燈名:紅色

當前燈序號:0

當前光線:1

當前燈名:綠色

當前燈序號:1

當前燈光:3

當前燈名:黃色

當前燈序號:2

當前燈光:2

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

【鍵=紅色,值=紅燈】

【鍵=綠色,值=綠燈】

【鍵=黃色,值=黃燈】

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

EnumSet中的當前數據為:1。

當前枚舉集中的數據是:3

當前枚舉集中的數據是:2

第四,常用的定義常數的方法與枚舉法定義常數的區別。

下面的內容可能很無聊,但絕對值得壹瞥。

1.代碼:

公共類狀態{

public靜態final int ON = 1;

公共靜態最終Int OFF = 0;

}

有什麽不好?大家都用了很久了。沒毛病。

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

其次,妳應該確保它的範圍是0和1。

最後,很多時候打印出來只看到1和0。

但是沒有看到代碼的人不知道妳想做什麽,並放棄了所有舊的公共靜態final常量。

2.您可以創建壹個enum類並將其視為普通類。除了它不能繼承其他類。(java是單壹繼承,它繼承了Enum),

您可以添加其他方法來重寫它自己的方法。

3.switch()參數可以使用枚舉。

4.values()方法是編譯器插入到枚舉定義中的靜態方法。因此,當您將枚舉實例轉換為父類枚舉時,values()不可訪問。解決方案:類中有壹個getenumConstants()方法,因此即使Enum接口中沒有values()方法,我們仍然可以通過類對象獲取所有Enum實例。

5.您不能從enum繼承子類。如果需要擴展enum中的元素,請創建壹個在接口內實現接口的枚舉來對元素進行分組。對枚舉元素進行分組。

6.使用EnumSet而不是標誌。枚舉要求其成員是唯壹的,但不能在枚舉中刪除添加的元素。

7.enummap的鍵是enum,值是任何其他對象。

Enum允許程序員為eunm實例編寫方法。因此,每個枚舉實例可以被賦予不同的行為。

9.使用enum的責任鏈,這與設計模式有關。用許多不同的方法解決問題。然後將它們連接在壹起。當請求到達時,遍歷鏈,直到鏈中的解決方案可以處理該請求。

10.使用枚舉的狀態機

11.使用enum進行多路分配。