2010-04-08 7 views
8

프로젝트에 주요 유스 케이스가 없을 수도 있지만 키 코드를 가져 오는 POC 종류의 프로젝트를 사용하고 있습니다. 그 값을 사용하여 키 이름을 인쇄하려고합니다. 화면. 나는 스위치 케이스를 쓰지 않아도 되살아나고 싶다.값을 사용하여 인터페이스 상수 이름 가져 오기

값을 사용하여 인터페이스 이름의 정수를 가져 오는 방법이 있습니까?

KeyPressed(int i) { 
    string pressedKeyName = getPressedKey(i); 
    System.out.println(pressedKeyName); 
} 
+0

당신이 얘기 확실 인터페이스? 열거 형을 의미하는 경우 질문을 이해할 수 있습니다. 그러나 인터페이스에 대한 "상수"와 같은 것은 없습니다. –

+0

글쎄 그것은 정말로 인터페이스입니다. 그리고 나는 그 밖의 무엇을 우리가 값을 가진 인터페이스에 배치 된 정수를 요구 하는지를 말하지 않습니다. – Ravisha

+0

...하지만 정수 정수로 정확히 무엇을 하시겠습니까? 의사 코드를 제공 할 수 있습니까? – Yaneeve

답변

21

리플렉션을 사용하는 것보다 두 가지 더 좋은 해결책을 생각할 수 있습니다.

  1. 괜찮은 IDE는 스위치 문을 자동 완성합니다. 나는 IntelliJ를 사용하고 이것이 (당신은 ctrl-enter를 누름) 이것을합니다. 나는 Eclipse/Netbeans이 비슷한 것을 가지고 있다고 확신한다. 및

  2. Enum은 public static primitives보다 상수에 대해 훨씬 더 나은 선택을합니다. 추가 된 이점은이 문제를 해결할 수 있다는 것입니다.

하지만 가정 반사를 통해 원하는 것을 찾을 수 있습니다 :

interface Foo { 
    public static final int CONST_1 = 1; 
    public static final int CONST_2 = 3; 
    public static final int CONST_3 = 5; 
} 

실행 :

public static void main(String args[]) { 
    Class<Foo> c = Foo.class; 
    for (Field f : c.getDeclaredFields()) { 
    int mod = f.getModifiers(); 
    if (Modifier.isStatic(mod) && Modifier.isPublic(mod) && Modifier.isFinal(mod)) { 
     try { 
     System.out.printf("%s = %d%n", f.getName(), f.get(null)); 
     } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
     } 
    } 
    } 
} 

출력 :

CONST_1 = 1 
CONST_2 = 3 
CONST_3 = 5 
+0

내 선택이되지 않을 것입니다. 노력 cletus.But에 대 한 고마워요하지만 정말 반영을 통해 그것을 원합니다 – Ravisha

+0

@Ravisha 업데이트를 확인하십시오. – cletus

+0

내가 친구에 대해 말하고 있었던 thats :) – Ravisha