Преобразование строки в эквивалентное значение перечисления
возможно ли для меня преобразовать a String к эквивалентному значению в Enumeration, используя Java.
Я могу, конечно, сделать это с большим if-else заявление, но я хотел бы избежать этого, если возможно.
учитывая эту документацию:
http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html
Я не слишком надеюсь, что это возможно без всяких операторе Case.
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