簡體   English   中英

枚舉值未與開關中的枚舉進行比較

[英]Enum value not comparing to enum in switch

我在Constants類中有一個帶有一些名稱的Enum:

static final enum NAMES {
    One,
    Two,
    Three,
    Four,
    Five
}

我試圖通過以下方法進行研究:

 for (Constants.NAMES name in Constants.NAMES.values())

然后在開關中使用它們:

 switch (index.key) {
     case Constants.NAMES.One:

我還嘗試過僅使用One作為案例,使用Enumset作為循環,唯一可行的方法是使用“ One”作為字符串,但這違背了Enum的目的。

這正在工作:

    for (Constants.NAMES script : Constants.NAMES.values()) {
        switch (index.key) {
            case Constants.NAMES.ONE.name():

如下定義您的枚舉:

enum NAMES {
    ONE, TWO, THREE, FOUR, FIVE
}

當與聲明枚舉一起使用時, static final是非法修飾符。 還要確保常量僅使用大寫字母定義。

然后使用:

public static void main(String[] args) {
    String myStr = "something";
    switch (NAMES.valueOf(myStr)) {

    case ONE:
        break;

    case TWO:
        break;

    // the rest 

    default:
        break;
    }

}

或者,您可以創建一個靜態方法來從enum獲取結果

enum NAMES {
    ONE, TWO, THREE, FOUR, FIVE;

    public static NAMES fetchValue(String constant) {
        NAMES name = null;
        for (NAMES num : EnumSet.allOf(NAMES.class)) {
            if (num.name().equals(constant)) {
                name = NAMES.valueOf(constant);
            }
        }
        return name;
    }
}

並使用以下命令調用它:

NAMES names = NAMES.fetchValue("ONE");

用這種方法,即使找不到常量,代碼也不會中斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM