87 votes

Obtenir une valeur de type String à partir d'un enum en Java

J'ai un enum défini comme ceci et je voudrais pouvoir obtenir les chaînes de caractères pour les différents statuts. Comment dois-je écrire une telle méthode ?

Je peux obtenir les valeurs int des statuts mais j'aimerais avoir la possibilité d'obtenir également les valeurs de chaîne de caractères à partir des ints.

public enum Status {
    PAUSE(0),
    START(1),
    STOP(2);

    private final int value;

    private Status(int value) {
        this.value = value
    }

    public int getValue() {
        return value;
    }
}

122voto

harsh Points 2875

Si status est de type Status enum, status.name() vous donnera son nom défini.

50voto

Juvanis Points 15491

Vous pouvez utiliser values() méthode :

Par exemple Status.values()[0] retournera PAUSE dans votre cas, si vous l'imprimez, toString() sera appelé et "PAUSE" sera imprimé.

12voto

DroidArc Points 1252

Utiliser la méthode par défaut nom() comme soufflet donné

public enum Category {
        ONE("one"),
        TWO ("two"),
        THREE("three");

        private final String name;

        Category(String s) {
            name = s;
        }

    }

public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println(Category.ONE.name());
    }
}

9voto

mabbas Points 3430

Vous pouvez ajouter cette méthode à votre enum Status :

 public static String getStringValueFromInt(int i) {
     for (Status status : Status.values()) {
         if (status.getValue() == i) {
             return status.toString();
         }
     }
     // throw an IllegalArgumentException or return null
     throw new IllegalArgumentException("the given number doesn't match any Status.");
 }

public static void main(String[] args) {
    System.out.println(Status.getStringValueFromInt(1)); // OUTPUT: START
}

0voto

J.Stange Points 178

Je crois que les enum ont un .name() dans leur API, assez simple à utiliser comme cet exemple :

private int security;
public String security(){ return Security.values()[security].name(); }
public void setSecurity(int security){ this.security = security; }

    private enum Security {
            low,
            high
    }

Avec cela, vous pouvez simplement appeler

yourObject.security() 

et il renvoie le haut/bas sous forme de chaîne, dans cet exemple

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