org.apache.commons.lang.enums學(xué)習(xí)筆記
在org.apache.commons.lang.enums包中只有3個(gè)類,主要是實(shí)現(xiàn)了枚舉類的操作。
Enum - 用于實(shí)現(xiàn)枚舉;
EnumUtils - 用于簡(jiǎn)化枚舉類的操作;
ValuedEnum - 另一種帶有int值的枚舉類型,主要用于switch語(yǔ)句。
雖然JDK 1.5以上已經(jīng)自帶了Enums類型,但這兩者還是有些區(qū)別的:標(biāo)準(zhǔn)的Enums是一個(gè)內(nèi)置的數(shù)據(jù)類型,不是一個(gè)超類;因?yàn)椴皇且粋€(gè)超類,所以不能繼承,也沒(méi)有Lang包中Enum類的方法;Lang包中的enum名字可以通過(guò)getName()獲得,而標(biāo)準(zhǔn)的Enums則只返回其類的名字。當(dāng)然,Apache組織還是希望沒(méi)必要的情況下,不要使用Lang包下的Enum類,因?yàn)镋num類是單獨(dú)實(shí)現(xiàn)枚舉用途的,和標(biāo)準(zhǔn)的Enums沒(méi)有任何關(guān)系,所以兩者之間將無(wú)法轉(zhuǎn)換。
Enum類和ValuedEnum類的使用方法很簡(jiǎn)單,在APIDOC中有詳細(xì)的例子。就不再這里重復(fù)了。但需要說(shuō)一下EnumUtils這個(gè)類,這個(gè)類個(gè)人認(rèn)為在jdk 1.5以后是一個(gè)無(wú)效類。我們看下面的例子:






























從設(shè)計(jì)角度,應(yīng)該打印出三遍StudentEnum中的數(shù)據(jù),但實(shí)際上只打印出了兩遍。第一次調(diào)用EnumUtils.iterator()方法的時(shí)候,返回的是空Iterator。這主要是jdk 1.5以后類的加載機(jī)制發(fā)生了變化,也就是static字段的加載時(shí)機(jī)改變了。在例子中,到StudentEnum.iterator()語(yǔ)句時(shí),StudentEnum類才被加載,StudentEnum的static字段才被初始化。而EnumUtils所有方法都是訪問(wèn)static字段的,所以在被訪問(wèn)的類沒(méi)有實(shí)際加載之前,是訪問(wèn)不到任何數(shù)據(jù)的。這個(gè)問(wèn)題在Apache的論壇上已經(jīng)被提及。
posted on 2009-01-05 14:00 Brian 閱讀(1376) 評(píng)論(0) 編輯 收藏 所屬分類: Jakarta Commons筆記