2016-07-22 6 views
4

안녕하세요, 아래에 표시된 것처럼 내부 클래스에있는 enum 값에 액세스하려고합니다. 그러나 내가 얻는 것은 값이 아니라 키입니다. . 내 응용 프로그램의 필요성은 내가 반영을 통해이 값에 액세스해야합니다. 출력 대신 "12"로 내가 "AllEven" 얻고이 일에Reflection을 통해 내부 클래스에있는 enum의 값을 가져 오는 방법

public class Test{ 
static class TwelveByTwentyFour { 
    public static enum BET_TYPE_NAME { 
     Direct12(12),AllOdd(12),AllEven(12), First12(12), Last12(12); 

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

      public int getValue() { 
       return value; 
      } 
      public void setValue(int value) { 
       this.value = value; 
      } 
    } 

} 
public static String getBetTypeLength(String gameName,String betType) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException{ 
     return Class.forName(Test.class.getCanonicalName()+"$"+gameName+"$"+"BET_TYPE_NAME").getDeclaredField(betType).get(null).toString(); 
    } 
public static void main(String[] args) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { 
    System.out.println(getBetTypeLength("TwelveByTwentyFour", "AllEven")); 
} 

}

. 아무도 내가 값을 얻을 수있는 방법을 말해줌으로써 나를 도울 수 있습니까?

답변

1

BET_TYPE_NAME.AllEven.name()과 동일한 값을 반환하려면 이 호출되며 부모 Enum 클래스에서 구현되므로 "AllEven"이됩니다. 거기에 getValue()

@Override 
public String toString() { 
    return this.value; 
} 

또는 열거 BET_TYPE_NAMEField.get(null)의 결과를 캐스팅 전화 :

"12"를 얻으려면 하나는 같은 BET_TYPE_NAME 열거 내부의 toString()를 오버라이드 (override) 할 필요가

return Integer.toString(((TwelveByTwentyFour.BET_TYPE_NAME) 
     Class.forName(Test.class.getCanonicalName()+"$"+gameName+"$"+"BET_TYPE_NAME") 
       .getDeclaredField(betType).get(null)).getValue()); 

현재 열거 형에는 설정자가 없어야하고 value은 항상 최종이어야합니다.열거 형 상수는 공유 된 싱글 톤입니다.

관련 문제