Преобразование строки в элемент enum

Рейтинг: 1Ответов: 1Опубликовано: 10.04.2015

Есть такой enum:

public enum PriorityType {
    LOW,
    MIDDLE,
    HIGTH
}

Есть объект с методом

public void setPriorityTyper(PriorityType priorityType) {
    this.priorityType = priorityType;
}

Значение Enum записано в файле Только как String. Я получаю значение из файла вот так:

   toDoDocument.setPriorityTyper(sharedPref.getString(AppContext.FIELD_PRIORITY_TYPE, ""));

Только я получаю его как String, а нужно что бы вернул типа enum PriorityType.

Как выкрутиться из этой ситуации?

Ответы

▲ 5Принят

Для преобразования строки в элемент enum в каждом enum'е есть метод valueOf:

PriorityType high = PriorityType.valueOf("HIGH");

Этот метод чувствителен к регистру, передаваемая строка должна в точности повторять имя элемента enum'а.

Ещё один вариант, позволяющий кастомизировать строки, на основании которых создаются элементы enum'а. Он строится на основе использования конструктора и реализации своего метода преобразования строки в елемент enum'а:

public enum PriorityType {
    LOW("LowPrioroty"),
    MIDDLE("MiddlePrioroty"),
    HIGH("HighPrioroty");

    private String value;

    private PriorityType(String value) {
        this.value = value;
    }

    public static PriorityType fromString(String value) {
        if (value != null) {
            for (PriorityType pt : PriorityType.values()) {
                if (value.equalsIgnoreCase(pt.value)) {
                    return pt;
                }
            }
        }
        throw new IllegalArgumentException("No such value");
    }
}

PriorityType low = PriorityType.fromString("lowpriority");