192 votes

Comment puis-je rechercher une énumération Java à partir de sa valeur de chaîne?

Je voudrais Rechercher un enum de sa valeur de chaîne (ou éventuellement une autre valeur). J’ai essayé le code suivant, mais elle ne permet pas statique, initialisers. Y a-t-il un moyen simple ?

275voto

Gareth Davis Points 16190

Utilisation du `` méthode qui est créé automatiquement pour chaque Enum.

Pour des valeurs arbitraires commencer avec :

Seulement passer plus tard à mise en œuvre du plan si votre profileur vous le dit.

Je sais que c’est une itération sur toutes les valeurs, mais avec seulement 3 valeurs enum, qu'il vaut la peine tout autre effort, en fait, sauf si vous avez un grand nombre de valeurs, que je ne voudrais pas déranger avec une carte ce sera assez rapide.

166voto

Lyle Points 1257

Vous êtes proche. Pour des valeurs arbitraires, essayez quelque chose comme ce qui suit :

13voto

Adam Gent Points 15055

Réponse de @Lyle est assez dangereux, et je l’ai vu ne travailler pas surtout si vous faites l’enum une classe interne statique. Au lieu de cela, j’ai utilisé quelque chose comme ça qui va charger les cartes de BootstrapSingleton avant les enums.

Me charge tout d’abord :

Maintenant le charger dans le constructeur de l’enum :

Si vous avez un enum interne, que vous pouvez simplement définir la carte ci-dessus la définition enum et qui (en théorie) devrait obtenir chargés avant.

7voto

Fredrik Points 4195

Et vous ne pouvez pas utiliser valueOf()?

Edit : Btw, il y a rien ne vous empêche d’utiliser {} public static enum.

0voto

Midhun Points 1

Peut-être, prendre un coup d'oeil à ce. Son travail pour moi. Le but de cette opération est à la recherche de 'ROUGE' avec '/red_color'. La déclaration d'une static map et le chargement de la enums en une seule fois, apporterait des avantages de performance si l' enums sont nombreux.

public class Mapper {

public enum Maps {

    COLOR_RED("/red_color", "RED");

    private final String code;
    private final String description;
    private static Map<String, String> mMap;

    private Maps(String code, String description) {
        this.code = code;
        this.description = description;
    }

    public String getCode() {
        return name();
    }

    public String getDescription() {
        return description;
    }

    public String getName() {
        return name();
    }

    public static String getColorName(String uri) {
        if (mMap == null) {
            initializeMapping();
        }
        if (mMap.containsKey(uri)) {
            return mMap.get(uri);
        }
        return null;
    }

    private static void initializeMapping() {
        mMap = new HashMap<String, String>();
        for (Maps s : Maps.values()) {
            mMap.put(s.code, s.description);
        }
    }
}
}

S'il vous plaît mettre dans votre opinons.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X