JDK5的列舉型別詳細介紹

2021-09-23 16:17:14 字數 1434 閱讀 9699

工作中還是一直使用jdk1.4.2版本,jdk5出來這麼久也只是偶爾玩玩,特別是在學習ejb3時好好體驗了一把annotation的便利.

列舉型別也是jdk5引入的新的特性,看了幾篇文章,還是蠻有趣的.

過去我們定義常量,都是在乙個專門的類或者介面中定義一大堆靜態常量型別,比如衣服的尺寸:

public   class  size  

然後這樣呼叫:size.x,size.m...

現在引入了列舉型別,我們可以這樣定義:

public   enum  size   

呼叫的方式不變,如:size.s,size.m...如果僅僅這樣的好處,好象還沒什麼理由讓我們體驗到便利的一面,ok,讓我們談談enum的特性.

1.排序,列舉型別預設按照原始排列的各個值元素的順序為依據,比如上面的例子:s

size.s.compareto(size.m);   // 結果為-1

2.通過values()來列舉所有的值,比如:

for (size s:size.values())  

此例用到了jdk5的新特性,簡化的for迴圈

3.列舉型別的集合:j2se5提供了enummap,v>和enumset)兩個列舉型別的集合型別,以map為例子:

enummap(size,string) map = new  enummap(size,string > (size. class );

map.put(size.s, " 適合身高55-160的人 " );

map.put(size.m, " 適合身高160-165的人 " );

map.put(size.l, " 適合身高165-170的人 " );

...4.給列舉型別增加方法:列舉型別可以像類那樣新增方法,假設大家在挑衣服的時候,常常不關心現在試的衣服的尺碼多少,而是簡單地獲取比當前的大乙個級別的尺碼,我們給size增加乙個increase()方法:

public  size increase()  

通過ordinal()方法找到當前的size物件的值在整個size值域中的位置,判斷位置是否是最大值,如果不是就再增長乙個級別返回.

問題來了,如果我們希望size的每個值都有乙個test方法返回訊息,而且訊息都不一樣.那我們該如何處理.當然,我們可以像上面這樣:

public string test()

可以我們想實現更個性化的訊息,比如"你好矮!...","你好胖..","你太高了吧!!!!"等等之類.首先我們給size定義乙個抽象方法:

abstract  string test();

然後就簡單了,每個值都實現自己的test方法:

s   

} ,m   

} ,l   

} ,xx   

} ,....

漂亮吧,列舉型別實在是個有趣的東東,當俺公司全面轉向j2se5的時候可以好好玩一把

文章**莊周夢蝶  ,原文發布5.16

JDK5新特性 列舉

一些程式在執行時,他需要的資料不能是任意的,而必須是一定範圍內的值,jdk5以前採用自定義類來解決,jdk5以後可以直接採用列舉解決。在jdk5之後,使用enum關鍵字定義一種新的型別,稱為列舉型別。enum類和enum關鍵字 使用enum關鍵字定義的列舉類,實際上就相當於定義了乙個類,此類繼承了e...

jdk5的執行緒池

接上篇 url 繼續討論執行緒池 jdk5也提供了執行緒池 而且非常簡單 code executorservice pool executors.newfixedthreadpool 4 建立執行緒池 4個工作執行緒 pool.execute new runnabletask 向任務佇列新增任務,任...

JDK5提供的阻塞佇列

jdk5的concurrent包裡面盡是寶貝,還好我有的是時間,正好可以一一八來。以前用多執行緒處理 生產者 消費者 問題的時候,需要採用wait,notify,現在有了這些阻塞佇列,就可以把這些wait,notify拋一邊,輕易的就能解決問題。首先是synchronousqueue,這個佇列裡面只...