莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          org.springframework.core.enums類圖

          Posted on 2007-04-11 15:57 dennis 閱讀(1699) 評論(0)  編輯  收藏 所屬分類: java源碼解讀
              這個包按照說明是:Interfaces and classes for type-safe enum support on JDK >= 1.3。提供類型安全的枚舉類型。代碼也是相當簡單,枚舉類型又分為靜態(tài)類型和通用類型。靜態(tài)類型其實跟jdk1.5引進的enum類型類似,都是以int類型做code,比如聲明一個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";
                      }
                  };

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

              
          //獲取某個類中聲明的枚舉類型,這些類型   //必須是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 使用了單例模式,同時AbstractCachingLabeledEnumResolver定義了一個模板法方法并使用:
          protected abstract Set findLabeledEnums(Class type);
          也是一個Template Method模式應用的例子。

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

          主站蜘蛛池模板: 道孚县| 光山县| 民勤县| 祁东县| 社会| 安远县| 措美县| 调兵山市| 民和| 分宜县| 辽源市| 清水河县| 定兴县| 泽州县| 广宗县| 古交市| 彝良县| 甘肃省| 绥宁县| 赤峰市| 通道| 清丰县| 库伦旗| 韶关市| 宿州市| 拜城县| 沁阳市| 视频| 岳西县| 武山县| 南皮县| 屏南县| 长顺县| 华池县| 建德市| 嵊州市| 青浦区| 台州市| 丹东市| 扶余县| 尚义县|