Подтвердить что ты не робот

Преобразование String в эквивалентное значение Enum

Возможно ли, чтобы я преобразовал a String в эквивалентное значение в Enumeration, используя Java.

Я могу, конечно, сделать это с помощью большого оператора if-else, но я хотел бы избежать этого, если это возможно.

С учетом этой документации:

http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html

Я не слишком надеюсь, что это возможно без ifs или case case.

4b9b3361

Ответ 1

Надеюсь, вы понимаете, java.util.Enumeration отличается от типов Java 1.5 Enum.

Вы можете просто использовать YourEnum.valueOf("String") для получения эквивалентного типа перечисления.

Таким образом, если ваше перечисление определено так:

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY
}

Вы можете сделать это:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);

Ответ 2

Предполагая, что вы используете перечисления Java 5 (что не так уж точно, поскольку вы упоминаете старый класс Enumeration), вы можете использовать метод valueOf подкласса java.lang.Enum:

MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS");

Ответ 3

Использовать статический метод valueOf(String), определенный для каждого enum.

Например, если у вас есть enum MyEnum, вы можете сказать MyEnum.valueOf("foo")

Ответ 4

Я мог бы переработать собственное решение, не понимая, что Type.valueOf("enum string") действительно существует.

Я думаю, это дает более подробный контроль, но я не уверен, что это действительно необходимо.

public enum Type {
    DEBIT,
    CREDIT;

    public static Map<String, Type> typeMapping = Maps.newHashMap();
    static {
        typeMapping.put(DEBIT.name(), DEBIT);
        typeMapping.put(CREDIT.name(), CREDIT);
    }

    public static Type getType(String typeName) {
        if (typeMapping.get(typeName) == null) {
            throw new RuntimeException(String.format("There is no Type mapping with name (%s)"));
        }
        return typeMapping.get(typeName);
    }
}

Я предполагаю, что вы обмениваете IllegalArgumentException на RuntimeException (или любое другое исключение, которое хотите бросить), которое может потенциально очистить код.