2012-05-19 3 views
7

을 열거 형자바 사용자 정의 열거 값이 같은 열거를

이제
public enum Sizes { 
    Normal(232), Large(455); 

    private final int _value; 

    Sizes(int value) { 
     _value = value; 
    } 

    public int Value() { 
     return _value; 
    } 
} 

내가 Sizes.Normal.Value를 호출 할 수 있습니다() 정수 값을 얻을 수 있습니다,하지만 어떻게 내가 열거에 정수 값을 다시 변환합니까?

public Sizes ToSize(int value) { 
    for (Sizes size : Sizes.values()) { 
     if (size.Value() == value) 
      return size; 
    } 
    return null; 
} 

하지만 그렇게 할 수있는 유일한 방법입니다 :

내가 지금 무엇입니까? 이것이 Java가 작동하는 방식입니다.

+1

가능한 복제본 [자바 열거 역방향 조회 우수 사례] (http://stackoverflow.com/questions/5316311/java-enum-reverse-look-up-best-practice) – bmargulies

답변

8

예, 일반적으로 정적 메서드를 열거 형에 추가하여 처리합니다. 그것에 대해 생각해보십시오. 열거 형에 10 개의 필드가있을 수 있습니다. 자바가 그들 모두에 대한 조회를 설정한다고 기대합니까?

여기서 핵심은 Java enum에는 'value'가 없다는 것입니다. 그들에게는 정체성과 서수 그리고 당신이 직접 추가 한 것 모두가 있습니다. 이는 C#에서 C++ 다음에 임의의 정수 값을 대신 사용하는 것과 다릅니다.

+2

정적 그의 열거 형에 HashMap하지만 열거 형 생성자 내에서 채울 수없는 것으로 보입니다. 1+ –

+0

글쎄, 여전히 C#이 enum을 처리하는 방법을 선호한다. 훨씬 빠릅니다. 열거 형은 전체 클래스가 아닌 정수 식별자라고 가정하십시오. – xmen

+0

정적 블록에서 초기화해야 할 수도 있습니다. static private HashMap map = new HashMap ; 그리고 나서 ctor에 넣으시겠습니까? – bmargulies

1

마지막으로 Java로 작업 한 이후로 시간이 지났지 만 올바르게 다시 호출하면 _value 필드와 열거 형 서수 사이에는 아무런 관련이 없습니다. AFAIK 예를 들어, 같은 _value 두 항목을 가질 수 있습니다. @bmargulies가 지적했듯이, 당신은 열거 형에 많은 필드를 가질 수 있으며, 그것들 각각 (또는 모두)에 대해 다른 값을 사용하는 것을 제약하지는 않습니다.

도 참조하십시오. this related question. 분명히 엔트리의 서수를 직접 설정할 수는 없습니다.

+0

그게 내가 왜 물었는지, 나는 C#과 같은 자바 내장 지원이있을 수 있다고 생각했지만 모든 것을 써야만합니다. 그것의 C++에서 일하는 것과 같습니다. – xmen

관련 문제