2017-02-20 1 views
1

Я использую в Java enum, Вот перечислениеНет Enum константа найдено для типа в Java

public enum AbuseSectionType{ 

    MUSIC("Music"), DANCE("Dance"), SOLO("Solo"), ACT("Act") 

    private String displayString; 

    AbuseSectionType(String displayValue) { 
     this.displayString = displayValue; 
    } 

    @JsonValue 
    public String getDisplayString() { 
     return displayString; 
    } 

    public void setDisplayString(String displayString) { 
     this.displayString = displayString; 
    } 
} 

Я пытаюсь получить значение AbuseSectionType.valueOf("Music"). Я не получаю перечислимую константу и не обнаружил ошибки. Я должен иметь значение MUSIC.

+1

Исправить. МУЗЫКА не Музыка. Даже если у него есть поле «String» с этим значением. –

+0

метод 'valueOf' в типах' enum' чувствителен к регистру! –

+0

@Elliot Frisch Как получить MUSIC, если у меня есть Music String. –

ответ

2

name() перечисления - это имя, указанное при его объявлении, MUSIC в вашем случае.

Если мы читаем Javadoc для valueOf():

Возвращает константу перечисления указанного перечислимого типа с указанным именем .

valueOf() использует name() перечисления. Но то, что вы хотите достичь, отличается, поэтому вы не можете использовать этот метод. Вместо этого вы можете сделать свой собственный метод, который находит значение из вашего собственного поля (displayString).

Вот пример:

public static AbuseSectionType fromDisplayString(String displayString) 
{ 
    for(AbuseSectionType type : AbuseSectionType.values()) 
     if(type.getDisplayString().equals(displayString) 
      return type; 

    return null; //not found 
} 
0

Метод по умолчанию valuOf() будет только получить соответствующий enmum если точное написание перечислений четкости используется. В вашем случае, если вы определили перечисление MUSIC так, чтобы получить, что тот, который вы должны сделать это следующим образом: AbuseSectionType.valueOf("MUSIC");

Для того, чтобы достичь того, что вы, кажется, хотите вы должны реализовать метод в классе перечислений самостоятельно , Для примера вы можете сделать Somthing так:

public AbuseSectionType resolve(String name) { 
    for(AbuseSectionType current : AbuseSectionType.values()) { 
     if(current.displayString.equals(name)) { 
      return current; 
     } 
    } 

    return null; 
} 
0

использовать AbuseSectionType.valueOf («MUSIC») передать имя перечисления. См. Java docs относительно использования valueOf

+0

Если вы хотите получить displayString, используйте AbuseSectionType.MUSIC.getDisplayString() –

Смежные вопросы