最?lèi)?ài)Java

          書(shū)山有路勤為徑,學(xué)海無(wú)涯苦作舟

          org.apache.commons.lang.enums學(xué)習(xí)筆記

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

          package test.org.apache.commons.lang.enums;

          import java.util.Iterator;
          import java.util.List;

          import org.apache.commons.lang.enums.EnumUtils;

          public class EnumsTest {
              
          public static void main(String[] args) {
                  System.out.println(
          "start");
                  Iterator it 
          = EnumUtils.iterator(StudentEnum.class);
                  
          while (it.hasNext()) {
                      System.out.println(it.next());
                  }

                  
                  it 
          = StudentEnum.iterator();
                  
          while (it.hasNext()) {
                      System.out.println(it.next());
                  }

                  
                  it 
          = EnumUtils.iterator(StudentEnum.class);
                  
          while (it.hasNext()) {
                      System.out.println(it.next());
                  }
                  
                  System.out.println(
          "end");
              }

          }


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

          posted on 2009-01-05 14:00 Brian 閱讀(1381) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Jakarta Commons筆記


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          公告


          導(dǎo)航

          <2009年1月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統(tǒng)計(jì)

          常用鏈接

          留言簿(4)

          隨筆分類(lèi)

          隨筆檔案

          收藏夾

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 朝阳区| 会昌县| 曲靖市| 大同市| 依兰县| 武乡县| 大冶市| 隆化县| 安化县| 龙山县| 石景山区| 旺苍县| 双流县| 通海县| 台山市| 荆州市| 海林市| 临汾市| 沙田区| 信宜市| 庆云县| 维西| 略阳县| 新建县| 东乌珠穆沁旗| 太仓市| 溆浦县| 徐水县| 临沂市| 乐清市| 大邑县| 邵武市| 乌鲁木齐市| 江门市| 石屏县| 天峻县| 龙游县| 海宁市| 桦川县| 兴隆县| 长治县|