當前位置:成語大全網 - 書法字典 - 如何在java中定義枚舉類型?

如何在java中定義枚舉類型?

作為Sun引入的新關鍵字,Enum看起來像壹個特殊的類。它也可以有自己的變量,定義自己的方法,實現壹個或多個接口。當我們聲明壹個枚舉類型時,我們應該註意到該枚舉類型具有以下特征。

1.它不能有公共構造函數,這可以確保客戶端代碼不能創建enum的新實例。

2.所有枚舉值都是公共的、靜態的和最終的。請註意,這僅適用於枚舉值。我們可以像在普通類中定義變量壹樣定義任何其他類型的非枚舉變量,並且這些變量可以使用您想要的任何修飾符。

3.默認情況下,enum實現java.lang.Comparable接口。

4.enum重寫了toString方法,所以如果我們調用Color。Blue.toString(),默認情況下將返回字符串“Blue”。

5.enum提供valueOf方法,該方法對應於toString方法。調用valueOf("Blue ")將返回Color。Blue所以我們自己重寫toString方法的時候要註意這壹點,相應的也要重寫valueOf方法。

6.enum還提供了values方法,使您能夠輕松地遍歷所有枚舉值。

7.enum還有壹個oridinal方法,該方法返回枚舉類中枚舉值的順序,該順序取決於枚舉值聲明的順序,其中Color。Red.ordinal()返回0。

了解了這些基本特性,我們來看看如何使用它們。

1.遍歷所有枚舉值。了解了values方法,我們就可以熟練地使用ForEach循環來遍歷枚舉值。

for (Color c: Color.values())

System.out.println("查找值:"+c);

2.在枚舉中定義方法和變量。例如,我們可以為Color添加壹個隨機返回顏色的方法。

公共枚舉顏色{

紅色,

綠色,

藍色;

/*

*定義壹個變量來表示枚舉值的數量。

*(我有點奇怪為什麽sun不直接為enum提供壹個size方法)。

*/

私有靜態int number = Color.values()。長度;

/**

*隨機返回壹個枚舉值。

@返回壹個隨機枚舉值。

*/

公共靜態顏色getRandomColor(){

long random = system . current time millis()% number;

開關((int) random){

案例0:

返回顏色。紅色;

案例1:

返回顏色。綠色;

案例二:

返回顏色。藍色;

默認值:返回顏色。紅色;

}

}

}

可以看出,在枚舉類型中定義變量和方法,與在普通類中定義方法和變量沒有區別。唯壹需要註意的是,變量和方法定義必須放在所有枚舉值定義之後,否則編譯器會給出錯誤。

3.重寫方法的tostring,value。

我們已經知道enum提供了toString、valueOf等方法,很多時候我們需要覆蓋默認的toString方法,那麽我們用enum做什麽呢?其實這和覆蓋普通類的toString方法沒什麽區別。

….

公共字符串toString(){

開關(這){

紅色外殼:

返回“顏色。紅色”;

綠色外殼:

返回“顏色。綠色”;

藍色外殼:

返回“顏色。藍色”;

默認值:

返回“未知顏色”;

}

}

….

這時我們可以看到,此時用前面的遍歷代碼打印出來的是

顏色。紅色

顏色。格林(姓氏);綠色的

顏色。藍色

而不是

紅色

格林(姓氏);綠色的

藍色。

可以看到toString確實是重載的。壹般來說,在重寫toString時,我們也應該重寫valueOf方法,使它們保持壹致。

4.使用構造函數

盡管enum不能有公共構造函數,我們仍然可以定義壹個私有構造函數在enum內部使用。讓我們以顏色為例。

公共枚舉顏色{

紅色(“這是紅色”),

綠色(“這是綠色”),

藍色(“這是藍色”);

私弦desc;

顏色(字符串desc){

this . desc = desc;

}

公共字符串getDesc(){

返回this.desc

}

}

這裏我們為每種顏色提供壹個描述信息,然後定義壹個構造函數來接受這個描述信息。

註意,這裏的構造函數不能是公共的,也不能是受保護的,這樣才能保證構造函數只能在內部使用,客戶端代碼不能創建枚舉值的實例。這也是完全合理的,因為我們知道枚舉值是public static final的常量。

5.實現特定的接口

我們已經知道enum可以定義變量和方法,它對壹個接口的實現和普通類是壹樣的,這裏就不舉例了。

6.定義您自己的枚舉值的方法。

正如我們前面看到的,我們可以為enum定義壹些方法。事實上,我們甚至可以為每個枚舉值定義方法。這樣,我們之前重寫toString的例子就可以改寫成這樣。

公共枚舉顏色{

紅色{

公共字符串toString(){

返回“顏色。紅色”;

}

},

綠色{

公共字符串toString(){

返回“顏色。綠色”;

}

},

藍色{

公共字符串toString(){

返回“顏色。藍色”;

}

};

}

從邏輯上講,這比最初的“全局”toString方法更清晰。

總的來說,enum作為壹個新定義的類型,希望能幫助程序員寫出更簡單易懂的代碼。

人們認為壹般沒必要過多使用enum的壹些高級特性,否則就違背了通俗易懂的初衷。