Преобразование строки в эквивалентное значение перечисления



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



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



учитывая эту документацию:



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



Я не слишком надеюсь, что это возможно без всяких операторе Case.

485   4  

4 ответов:

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

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

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

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

вы могли бы сделать это:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);

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

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

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

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

Я мог бы перепроектировать свое собственное решение, не понимая этого 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 (или любое исключение, которое вы хотите бросить), которое потенциально может очистить код.

Comments

    Ничего не найдено.