Ich habe eine Aufzählung wie diese definiert und möchte die Zeichenfolgen für die einzelnen Status erhalten können. Wie soll ich eine solche Methode schreiben?
Ich kann die int-Werte der Status abrufen, möchte aber die Option, die Zeichenfolgenwerte auch von den Ints abzurufen.
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;
}
}
Status.ordinal();
ordinal()
da das Hinzufügen eines Wertes in der Aufzählung die Ordnungszahl jeder Aufzählung verschiebt. Ich wollte darauf hinweisen, dass das OP dasordinal()
Verhalten des OP duplizierte .Antworten:
Wenn
status
es vom TypStatus
enum iststatus.name()
, erhalten Sie den definierten Namen.quelle
toString()
scheint der bevorzugte Weg gemäß der offiziellen Dokumentation zu sein: "Die meisten Programmierer sollten die toString () -Methode gegenüber dieser bevorzugen, da die toString-Methode möglicherweise einen benutzerfreundlicheren Namen zurückgibt." ( docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#name () )status.name()
ist geeignet, wenn Sie es im Code verwenden möchten (aus Gründen der Genauigkeit und Konsistenz), undstatus.toString()
geeignet, wenn Sie es dem Benutzer anzeigen möchten (aus Gründen der Lesbarkeit).Sie können folgende
values()
Methode verwenden:Zum Beispiel
Status.values()[0]
wird PAUSE in Ihrem Fall zurückgegeben, wenn Sie es drucken,toString()
wird aufgerufen und "PAUSE" wird gedruckt.quelle
Status.values()[0]
wäre vom TypStatus
nichtString
.Verwenden Sie den Standardmethodennamen () als Balg
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()); } }
quelle
Sie können diese Methode zu Ihrer Statusliste hinzufügen:
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 }
quelle
Ich glaube, enum hat einen .name () in seiner API, der wie in diesem Beispiel ziemlich einfach zu verwenden ist:
private int security; public String security(){ return Security.values()[security].name(); } public void setSecurity(int security){ this.security = security; } private enum Security { low, high }
Damit können Sie einfach anrufen
In diesem Beispiel wird high / low als String zurückgegeben
quelle