工作中還是一直使用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,這個佇列裡面只...