閱讀952 返回首頁    go 阿裏雲 go 技術社區[雲棲]


org.springframework.core.enums類圖

    這個包按照說明是:Interfaces and classes for type-safe enum support on JDK >= 1.3。提供類型安全的枚舉類型。代碼也是相當簡單,枚舉類型又分為靜態類型和通用類型。靜態類型其實跟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";
            }
        };

同時有一個靜態枚舉類型的處理類用於提取信息:StaticLabeledEnumResolver ——這個類繼承自抽象類AbstractCachingLabeledEnumResolver,而抽象類實現了接口LabeledEnumResovler,看看這個接口就知道所謂處理類是幹什麼的了:
public interface LabeledEnumResolver {

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

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

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

}

StaticLabeledEnumResolver 使用了單例模式,同時AbstractCachingLabeledEnumResolver定義了一個模板法方法並使用:
protected abstract Set findLabeledEnums(Class type);

也是一個Template Method模式應用的例子。

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

文章轉自莊周夢蝶  ,原文發布時間5.17

最後更新:2017-05-17 13:35:14

  上一篇:go  創建自己的ruby Gems
  下一篇:go  MySQL使用初步—mysql數據庫的基本命令