2011-10-31 4 views
1

내가 좋아하는 상수의 설정 :자바 enum에서 어떻게 검색합니까?

if (String val in [CONST1,CONST2,CONST3]) { 
do something;} 
else { 
.... 

는이 작업을 수행 할 수 있습니다 : 응용 프로그램에서

public static final String CONST1="abc"; 
public static final String CONST2="cde"; 
public static final String CONST3="ftr"; 
................................... 
public static final String CONSTN="zya"; 

, 좀 값이 같은 상수의 일부 세트에 있는지 확인해야 열거? 또는 집합이나 배열을 사용하는 것이 더 좋습니까? 감사합니다. . 당신이 필요로하는 무엇

답변

6

Enum.valueOf()

가 지정된 이름을 가지는 지정된 enum 형의 열거 형 정수를 돌려줍니다이다. 이름은 정확히 에 사용되는 식별자와 일치해야합니다.이 유형에서 enum 상수를 선언하십시오. (여분의 공백 문자가 허용되지 않습니다.) 여기

내가 일반적으로 열거 형과 함께 작업하고있을 때 무엇의 예입니다 "나쁜"데이터가오고.

public class EnumTest 
{ 
    public static void main(final String[] args) 
    { 
     final Option o = Option.safeValueOf(args[0]); 
     switch(o) 
     { 
      case CHOICE_A: // fall through 
      case CHOICE_B: // fall through 
      case CHOICE_C: // fall through 
       System.out.format("You selected %s", o); 
       break; 
      case CHOICE_D: 
       System.out.format("You selected %s", o); 
       break; 
      default: 
       System.out.format("Default Choice is %s", o); 
     } 
    } 

    public enum Option 
    { 
     UNRECOGNIZED_CHOICE, CHOICE_A, CHOICE_B, CHOICE_C; 

     // this hides the Exception handling code 
     // so you don't litter your code with try/catch blocks 
     Option safeValueOf(final String s) 
     { 
      try 
      { 
       return Option.valueOf(s); 
      } 
      catch (final IllegalArgumentException e) 
      { 
       return UNRECOGNIZED_CHOICE; 
      } 
     } 
    } 
} 

하는 당신은 또한 변환 할 수 있습니다 Option.values()에서 Array까지의 값을 EnumSet에 입력하고 검색하여 가능한 많은 양의 불량 데이터가 있다고 생각되면 가능한 한 오버 헤드를 피하십시오. @Dims가 제안

+0

좋은 반응. 모든면을 다루고 정중하게 작성되었습니다. – RockyMM

4

당신은 switch 문에서 열거를 사용할 수 있습니다

switch (val) { 
    case CONST1: case CONST2: case CONST3: 
     do_something(); 
    break; 
    case CONST4: 
     do_something_else(); 
    break; 
    default: 
     // we should not be here?!? 
    break; 
} 

것은 내가 val이 열거이라고 가정 곳. @의 재 러드 - 로버슨은 제안 당신은 그것을 만들 수 있습니다

val = MyEnum.valueOf(stringValue);   
+1

'stringValue'가 enum 값 중 하나가되지 않을 경우 try-catch에'valueOf()'를 래핑하십시오. 또한이 사건이 많이 발생하면 Exception 객체를 생성하고 try-catch 메커니즘을 수행하는 데 드는 시간을 낭비하지 않게됩니다. – dtyler

2

체크 아웃 java.util.EnumSet를 - 그것은 열거에 최적화 된 특별한 세트의 구현입니다.

관련 문제