문자열을 동등한 Enum 값으로 변환 있지만 가능하면이를 피하고 싶습니다. 이 문서가 주어지면 : http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html 나는

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.