2009-07-01 7 views

답변

252

자바 열거 형은 C 또는 C++ 열거 형과 같지 않습니다.이 열거 형은 실제로 정수의 레이블입니다.

자바 열거 형은 클래스와 마찬가지로 구현되며 여러 특성을 가질 수도 있습니다.

public enum Ids { 
    OPEN(100), CLOSE(200); 

    private final int id; 
    Ids(int id) { this.id = id; } 
    public int getValue() { return id; } 
} 

큰 차이

형태 보증 당신이 SIZE 변수에 COLOR 열거 할당에 대해 걱정할 필요가 없습니다 의미 있다는 것입니다.

자세한 내용은 http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html을 참조하십시오.

+0

성명을 기반으로 java를 사용하여 순차적 열거 형 (C++ 열거 형과 유사)을 만들거나, 인덱스를 배열이나 다른 것으로 만들려면 열거 형을 사용하는 것이 가장 좋습니다. Ids { 이름 (0), 나이 (1), HEIGHT (2), 중량 (3); } 고맙습니다. -bn –

+0

가능성이 있으며 특히 적분 값을 어딘가에서 직렬화하는 경우 특히 그렇습니다. – lavinio

+1

함수에서이 열거 형을 사용하는 방법을 알려주십시오. –

73

예. 당신은 정말 같이 열거의 생성자에 숫자 값을 전달할 수 있습니다 :

enum Ids { 
    OPEN(100), 
    CLOSE(200); 

    private int value;  

    private Ids(int value) { 
    this.value = value; 
    } 

    public int getValue() { 
    return value; 
    } 
} 

자세한 내용은 Sun Java Language Guide를 참조하십시오.

+0

쿨를. 혼합 할 수 있습니까? 나는. 선택한 Enum 값에만 숫자를 할당하십시오. –

+0

private 한정자가 열거 형 생성자에 대해 중복 됨 –

10

매우 큰 enum 유형을 사용하면 다음을 유용하게 사용할 수 있습니다.

10

무슨 이런 식으로 사용하는 방법에 대한 :

정적 방법을 사용하고 같은 매개 변수 로 열거를 전달할 수 있습니다 ..

public enum HL_COLORS{ 
      YELLOW, 
      ORANGE; 

      public int getColorValue() { 
       switch (this) { 
      case YELLOW: 
       return 0xffffff00; 
      case ORANGE: 
       return 0xffffa500;  
      default://YELLOW 
       return 0xffffff00; 
      } 
      } 
} 

단 하나 개의 방법이입니다 :

public enum HL_COLORS{ 
      YELLOW, 
      ORANGE; 

      public static int getColorValue(HL_COLORS hl) { 
       switch (hl) { 
      case YELLOW: 
       return 0xffffff00; 
      case ORANGE: 
       return 0xffffa500;  
      default://YELLOW 
       return 0xffffff00; 
      } 
      } 

이 두 가지 방법은 메모리와 프로세스 유닛을 더 적게 사용한다는 점에 유의하십시오. 이것이 최선의 방법이라고 말하지만 그것의 또 다른 접근 방법입니다.

+1

두 번째 예제에서'getColorValue()'가 동기화되는 이유는 무엇입니까? – josaphatv

+0

그것은 이해가 안 돼요 .. 내가 코드에서 제거 .. 감사합니다 Logged –

2

는 C/C++ (기본 납입 및 nexts의 증분)의 열거 모방하려는 경우 :

enum ids { 
    OPEN, CLOSE; 
    // 
    private static final int BASE_ORDINAL = 100; 
    public int getCode() { 
     return ordinal() + BASE_ORDINAL; 
    } 
}; 

public class TestEnum { 
    public static void main (String... args){ 
     for (ids i : new ids[] { ids.OPEN, ids.CLOSE }) { 
      System.out.println(i.toString() + " " + 
       i.ordinal() + " " + 
       i.getCode()); 
     } 
    } 
} 
OPEN 0 100 
CLOSE 1 101 
관련 문제