2016-11-14 68 views
2

我對Java枚舉相當新,我目前正試圖實現一個枚舉列表,其中每個值都具有與每個值相關的True/False值。我的枚舉列表看起來像這樣主要爲:將獨立狀態設置爲Java枚舉值

public enum SomeEnum{ 
    A("A"), 
    B("B"), 
    C("C"), 
    D("D"); 
    private String name; 
    private SomeEnum(String name){ 
    this.name = name; 
    } 
} 

不過,我想每個枚舉值有一個「真」或「假」與它相關聯。這對Java枚舉是否合理?或者我需要在不使用枚舉的情況下處理它。最終,我想有一些setter/getter方法來獨立設置和獲取每個狀態。

謝謝!

編輯:對不起,我很不清楚我想做什麼。我正在爲DDS創建一個消息集,並希望爲一組狀態消息創建一個消息集,分別顯示TRUE或FALSE,並且可以更改。我想我可以以某種方式使用枚舉來完成此操作,而不是創建每個變量的單獨實例。

+0

在你的情況下,你不需要提供一個名稱,如果它是一樣的的枚舉值。你可以通過SomeEnum.A.name() –

回答

3

簡答:取決於你的用例。這是完全合理的,以有這樣的事:因爲一個枚舉值(AB等)的名稱String表示作爲

public enum SomeEnum{ 
    A(true), 
    B(false), 
    C(true), 
    D(false); 

    private boolean myBool; 

    private SomeEnum(boolean myBool){ 
     this.myBool = myBool; 
    } 

    public boolean geMyBool() { 
     return myBool; 
    } 
} 

不要使用name作爲字段的名稱雖然Java中所有enum值的name。因此,例如SomeEnum.A.getName()等於「A」。該功能內置於所有枚舉中。

另請注意,如果將值設置爲myBool它會混淆枚舉的用戶,因爲運行時狀態將與源代碼中存在的值不一致。

+0

得到它謝謝你的答案! 但是,是否可以使用枚舉並覆蓋每個枚舉的布爾值?根據我的理解,當設置在枚舉列表中時,真/假布爾是靜態/最終的。是否有可能分別分配給每個枚舉的外部變量? – KyleKW

+0

@KyleKW你可以添加一些僞代碼來顯示你想用這個枚舉做什麼? –

+0

我修復了我的答案。如果你能分享你的用例,這將是很酷的。 –

0
public enum SomeEnum{ 
    A("A", true), 
    B("B", false), 
    C("C", false), 
    D("D", true); 

    private String name; 
    private boolean isImportant; 

    private SomeEnum(String name, boolean isImportant){ 
     this.name = name; 
     this.isImportant = isImportant; 
    } 

}

+0

偉大的亞歷克斯。你如何得到這個重要標誌的價值?你需要爲它添加一個getter方法。 –

0

你是附近的解決方案,只需添加一個新的參數去構造

public enum SomeEnum{ 
    A("A", true), 
    B("B", false), 
    C("C", true), 
    D("D", false); 

    private String name; 
    private boolean flag; 

    private SomeEnum(String name, boolean flag){ 
    this.name = name; 
    this.flag = flag; 
    } 
} 
0

答案是肯定的,這是簡單的事。

public enum SomeEnum{ 
    A(true), 
    B(false), 
    C(true), 
    D(false); 
    private boolean flag; 
    private SomeEnum(boolean flag){ 
     this.flag = flag; 
    } 

    public boolean getFlag() { 
     return flag; 
    } 
} 

而且你不需要做名稱變量,因爲枚舉已經有一個名爲name()方法,返回你代表你的實例名稱的字符串。如果你想要字符串是不同的只是覆蓋方法toString()並使用它來獲得一個字符串是不一樣的你的枚舉實例名稱