org.springframework.core.enums類圖

dennis_zane發表於2007-04-11
    這個包按照說明是: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 

109925.html

dennis 2007-04-11 15:57 發表評論

相關文章