Java를 사용하여를 String
에서 동등한 값 으로 변환 할 수 있습니까?Enumeration
물론 큰 if-else
성명으로 이를 수행 할 수 있지만 가능하면이를 피하고 싶습니다.
이 문서가 주어지면 :
http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html
나는 이것이 ifs 또는 case 문없이 가능하다고 너무 희망적이지 않습니다.
답변
깨닫기를 바라는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);
답변
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
.