J'ai un enum défini comme ceci et j'aimerais pouvoir obtenir les chaînes pour les statuts individuels. Comment devrais-je écrire une telle méthode?
Je peux obtenir les valeurs int des statuts mais souhaiterais pouvoir également obtenir les valeurs de chaîne 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;
}
}
si status
est de type Status
enum, status.name()
vous donnera son nom défini.
Vous pouvez utiliser la méthode values()
:
Par exemple, Status.values()[0]
retournera PAUSE dans votre cas. Si vous l'imprimez, toString()
sera appelé et "PAUSE" sera imprimé.
Utiliser le nom de méthode par défaut () comme indiqué ci-dessous
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());
}
}
Vous pouvez ajouter cette méthode à votre énumération de statut:
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
}
Je crois qu’enum a un .name () dans son API, assez simple à utiliser comme dans 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 retourne haut/bas sous forme de chaîne, dans cet exemple