2012-03-28 3 views
-1

J'ai une classe avec une liste des constantes ...recherche inversée constante

public static final java.lang.String HEARTBEAT = "0"; 
    public static final java.lang.String TEST_REQUEST = "1"; 
    public static final java.lang.String RESEND_REQUEST = "2"; 

Je voudrais aller de « 0 » -> « Hearbeat » en quelque sorte.

Toutes bonnes classes util pour cela?

+0

Je suis en train de deviner qu'il y a une bibliothèque de réflexion Apache qui pourrait aider avec ça. –

Répondre

1

Je suggérerais d'utiliser une énumération au lieu de constantes pour commencer - alors vous pouvez construire le mappage inverse dans l'énumération.

public enum RequestType { 
    HEARTBEAT("0"), 
    TEST_REQUEST("1"), 
    RESEND_REQUEST("2"); 

    private final String text; 
    private static final Map<String, RequestType> reverseLookup; 

    static { 
     // Or use an immutable map from Guava, etc. 
     reverseLookup = new HashMap<String, RequestType>(); 
     for (RequestType type : EnumSet.allOf(RequestType.class)) { 
      reverseLookup.put(type.text, type); 
     } 
    } 

    private RequestType(String text) { 
     this.text = text; 
    } 

    public String getText() { 
     return text; 
    } 

    public static RequestType getType(String text) { 
     return reverseLookup.get(text); 
    } 
} 
+0

3ème partie bibliothèque :-( –

+0

Gah! Battu par Jon Skeet pour moins d'une minute ... – pcalcao

+0

@DD .: Cela aurait été utile si vous l'aviez dit auparavant. Je continuerais à construire l'énumération dans votre code, et utilisez les constantes 3ème partie pour fournir les valeurs de texte ... puis utilisez l'énumération partout dans votre code.Cela vous donnera également plus de sécurité de type –

1

S'il est possible (comme, vous êtes autorisé à modifier le code), modifiez ces constantes dans un enum. De cette façon, vous pouvez facilement coder une fonction "recherche inversée" en ayant une valeur associée à chaque entrée enum.

En théorie, si vous avez chaque entrée représentant un nombre de 0..N, vous pouvez même utiliser le numéro de l'entrée (il est donné par l'énumération), mais ce n'est pas exactement une bonne pratique.

Puisque vous ne pouvez pas utiliser une énumération, vous pouvez la pirater par réflexion (attention, c'est fugace).

Accessing Java static final ivar value through reflection

Ce fil a un code qui accède aux valeurs public static final avec la réflexion. Vous pouvez utiliser une carte pour stocker cette relation, la rechercher en temps réel, ou essayer de l'encapsuler dans un Enum, comme Jon Skeet l'a suggéré, et utiliser cette énumération à partir de maintenant (avec tous les avantages que cela apporte).

+0

3ème partie de la bibliothèque ... ne peut pas faire cela –

+0

Est-ce que mon aide edit ? – pcalcao