2013-11-21 7 views
0

Enum 값을 기반으로 If 식을 작성하는 방법은 무엇입니까?Enum을 사용하여 IF 문을 작성하십시오.

내 Enum gameStatus의 상태는 WON, LOST, CONTINUE 및 NOTSTARTED입니다. 현재 Enum 값을 기반으로 결정을 내리고 싶습니다. 같이 일하는 것이

뭔가 :

if(gameStatus == WON) 
{ 
    point++; 
} 
else if(gameStatus == LOST) 
{ 
    point--; 
} 

답변

3

당신은 몇 합리적인 옵션이 있습니다. 당신도 static import 열거 필드 수 있습니다 코드가 실제로

if(gameStatus == GameStatus.WON) 
{ 
    point++; 
} 
else if(gameStatus == GameStatus.LOST) 
{ 
    point--; 
} 

모양 또는 당신이 사용하는 경우 당신은 피할 둘 수 있도록

import static com.example.foo.GameStatus.*; 

또는 대신 는 열거 형 이름으로에게 그 자격을 switch 대신 if/else의 :

switch (gameStatus) { 
    case WON: 
     point++; 
     break; 
    case LOST: 
     point--; 
     break; 
} 
2

당신은 당신의 시나리오에서 세 번째 옵션이 있습니다 enum 클래스에 추상 메소드를 정의하고 메소드를 대체하여 else 나 switch가 전혀 없도록하는 것입니다!

... 
    point = point + gameStatus.score(); 
    ... 

    enum STATE { 
     WIN { 
      @Override 
      public int score() { 
       return 1; 
      } 
     }, 
     LOSE { 
      @Override 
      public int score() { 
       return -1; 
      } 
     } 
     public abstract int score(); 
    } 
+0

네, 이것도 좋은 해결책입니다. 즉, 각 필드가 개별적으로 구현하는 추상적 인 메서드를 사용하면 약간 과도하다는 것입니다. 'score this'가 생성자에 전달 된 필드 인 간단한'return this.score'는 덜 장황하고 깨끗합니다. –

관련 문제