2010-04-08 13 views
8

Esto podría no tener un uso importante en los proyectos, pero solo estaba probando un tipo de proyecto de POC donde obtengo el código de clave, y usando su valor quiero imprimir el nombre de la clave en pantalla. Quiero revivirme escribiendo cajas de interruptores, pensando en ir por reflejo.Obtener nombre de interfaz constante usando su valor

¿Hay alguna forma de obtener el entero constante del nombre de la interfaz utilizando su valor?

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

¿Seguro que está hablando interfaces? Porque tu pregunta podría tener sentido si te refieres a enumeraciones. Pero no existe un "entero constante" para las interfaces. –

+0

Bueno, realmente es la interfaz. Y no sé qué más llamamos para enteros que se colocan en la interfaz con los valores. – Ravisha

+0

... pero, ¿qué es exactamente lo que deseas hacer con el entero constante? ¿Podrías proporcionar ese pseudocódigo? – Yaneeve

Respuesta

21

Se me ocurren dos mejores soluciones que la reflexión.

  1. Cualquier IDE decente se autocompletará en las declaraciones de interruptor para usted. Yo uso IntelliJ y lo hace (solo presiona ctrl-enter). Estoy seguro de que Eclipse/Netbeans tienen algo similar; y

  2. Las enumeraciones son una opción mucho mejor para las constantes que las primitivas estáticas públicas. La ventaja adicional es que lo relevarán de este problema.

Pero para averiguar lo que quiere a través de la reflexión, suponiendo:

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

Run:

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(); 
     } 
    } 
    } 
} 

Salida:

CONST_1 = 1 
CONST_2 = 3 
CONST_3 = 5 
+0

Esa no sería mi elección. Gracias por el esfuerzo cletus.Pero es realmente lo quiero a través de la reflexión – Ravisha

+0

@Ravisha echa un vistazo a la actualización. – cletus

+0

eso es de lo que estaba hablando amigo :) – Ravisha

Cuestiones relacionadas