莊周夢(mèng)蝶

          生活、程序、未來(lái)
             :: 首頁(yè) ::  ::  :: 聚合  :: 管理

          org.springframework.core.enums類圖

          Posted on 2007-04-11 15:57 dennis 閱讀(1700) 評(píng)論(0)  編輯  收藏 所屬分類: java源碼解讀
              這個(gè)包按照說(shuō)明是:Interfaces and classes for type-safe enum support on JDK >= 1.3。提供類型安全的枚舉類型。代碼也是相當(dāng)簡(jiǎn)單,枚舉類型又分為靜態(tài)類型和通用類型。靜態(tài)類型其實(shí)跟jdk1.5引進(jìn)的enum類型類似,都是以int類型做code,比如聲明一個(gè)Dog類型:
          public static class Dog extends StaticLabeledEnum {

                 
          private Dog(int code, String name) {
                      
          super(code, name);
                  }
              }

          然后就可以這樣聲明枚舉類型了:

          public static final Dog BORDER_COLLIE = new Dog(13"Border Collie");

          public static final Dog WHIPPET = new Dog(14"Whippet");

          public static final Dog GOLDEN_RETRIEVER = new Dog(11null) {
                      
          // must set type to be recognized as a "Dog"
                      public Class getType() {
                          
          return Dog.class;
                      }

                      
          public String getLabel() {
                          
          return "Golden Retriever";
                      }
                  };

          同時(shí)有一個(gè)靜態(tài)枚舉類型的處理類用于提取信息:StaticLabeledEnumResolver ——這個(gè)類繼承自抽象類AbstractCachingLabeledEnumResolver,而抽象類實(shí)現(xiàn)了接口LabeledEnumResovler,看看這個(gè)接口就知道所謂處理類是干什么的了:
          public interface LabeledEnumResolver {

              
          //獲取某個(gè)類中聲明的枚舉類型,這些類型   //必須是LabeledEnum的子類
              public Set getLabeledEnumSet(Class type) throws IllegalArgumentException;

              
          public Map getLabeledEnumMap(Class type) throws IllegalArgumentException;
             
              //根據(jù)code獲取枚舉
              
          public LabeledEnum getLabeledEnumByCode(Class type, Comparable code) throws IllegalArgumentException;

              //根據(jù)lable獲取枚舉
              
          public LabeledEnum getLabeledEnumByLabel(Class type, String label) throws IllegalArgumentException;

          }

          StaticLabeledEnumResolver 使用了單例模式,同時(shí)AbstractCachingLabeledEnumResolver定義了一個(gè)模板法方法并使用:
          protected abstract Set findLabeledEnums(Class type);
          也是一個(gè)Template Method模式應(yīng)用的例子。

          所謂通用性的枚舉類型,是指不定義成static,并且可以靈活使用其他類型做code的枚舉,比如spring已經(jīng)內(nèi)置的3種:ShortCodedLabeledEnum ,StringCodeLabeledEnum和LetterCodeLabeledEnum,這些類都繼承自AbstractLabeledEnum,類名已經(jīng)顯示了它們的用途,不再細(xì)說(shuō)。這個(gè)包完整的類圖如下:
           

          主站蜘蛛池模板: 高阳县| 安岳县| 武乡县| 湛江市| 万源市| 绥化市| 嘉义市| 海盐县| 大邑县| 沙田区| 秦皇岛市| 防城港市| 洞口县| 渝中区| 婺源县| 库伦旗| 枞阳县| 阳原县| 阿图什市| 呈贡县| 新昌县| 大名县| 南华县| 郎溪县| 丹东市| 呈贡县| 虹口区| 泾阳县| 扎兰屯市| 兴仁县| 拜城县| 蛟河市| 泰安市| 眉山市| 克拉玛依市| 洛阳市| 浠水县| 齐河县| 泰和县| 东至县| 铁力市|