2011-03-01 68 views
1

我有一些代碼,獲取用於枚舉值:非空枚舉類似於非空對象?

StringUtils.isEmpty(getEnumMember().value()); 

支持的代碼看起來是這樣的:

public CustomEnum getEnumMember() { 
    return enumMember; 
} 

---- 

public enum CustomEnum { 

    TEXT1("text1"), 
    TEXT2("text2"), 
    TEXT3("text3"); 

    private final String value; 

    CustomEnum(String v) { 
     value = v; 
    } 

    public String value() { 
     return value; 
    } 

    ... 
} 

我想知道如果有一個getEnumMember的方式來處理空的枚舉與我可以處理空對象的方式相同。例如:

public CustomEnum getEnumMember() { 
    if (enumMember ==null) { 
     return new CustomEnum(); 
    } 
    return enumMember; 
} 

但我不能實例化一個「新的CustomEnum」。你將如何處理這個getEnumMember()不會返回null?我不想爲「ENUM_IS_NULL(」「)」創建一個特殊的枚舉值。

+1

你需要爲這個自定義值。順便說一下,在你的例子中用普通對象寫代碼並不總是一個好主意。 – biziclop 2011-03-01 18:48:25

回答

8

當你創建一個枚舉時,你說這個類型的任何變量都會有一個定義的值列表 - 或者是null。這是不可避免的。所以你必須接受空值,或者確定一個合適的值 - 不管它是你現有的枚舉值還是新添加的值。這些是你唯一的選擇。代碼return new CustomEnum();只是沒有意義;您必須選擇其中一個枚舉值,並且必須指定哪一個。

+0

是的。我很有希望:) – TERACytE 2011-03-01 19:13:53

3

無法完成。枚舉想法的一部分是枚舉所有可能的值,並且不能只添加更多。

你要麼必須做:

public enum CustomEnum { 

    TEXT1("text1"), 
    TEXT2("text2"), 
    TEXT3("text3"), 
    ENUM_IS_NULL(""); 
    ... 
} 

或:

StringUtils.isEmpty(getEnumMember() == null? "" : getEnumMember().value()); 

或處理NullPointerException S IN StringUtils.isEmpty