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