Abrufen des String-Werts von Enum in Java

Lesezeit: 3 Minuten

Benutzer-Avatar
Mozbi

Ich habe eine Aufzählung wie folgt 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 auch die String-Werte aus den Ints erhalten.

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 s = Status.PAUSE; System.out.println(s.name());

    – Nikola Yovchev

    19. Juli 2013 um 8:47 Uhr

  • Diese Antwort hilft Ihnen beim Verständnis von stackoverflow.com/questions/17606866/…

    – Prasad Charkar

    19. Juli 2013 um 8:50 Uhr

  • Anstatt 0,1,2 zu definieren, können Sie verwenden Status.ordinal();

    – Arnaud Denoyelle

    19. Juli 2013 um 8:59 Uhr

  • @ArnaudDenoyelle: Sie sollten die Verwendung von ordinal() vermeiden, siehe Joshua Bloch “Effective Java”

    – Garfield Klon

    3. August 2015 um 12:38 Uhr


  • @GarfieldKlon Ich stimme zu. Ich rate nicht (und werde es niemals tun), sich darauf zu verlassen ordinal() weil das Hinzufügen eines Werts in der Aufzählung die Ordnungszahl jeder Aufzählung verschiebt. Ich wollte darauf hinweisen, dass das OP die dupliziert hat ordinal()s Verhalten.

    – Arnaud Denoyelle

    3. August 2015 um 12:46 Uhr

wenn status ist vom Typ Status aufzählen, status.name() gibt Ihnen den definierten Namen.

  • @Joe Maher toString() scheint laut offizieller Dokumentation der bevorzugte Weg zu sein: “Die meisten Programmierer sollten die Methode toString () dieser Methode vorziehen, da die Methode toString möglicherweise einen benutzerfreundlicheren Namen zurückgibt.” (docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#name())

    – Karsten

    29. August 2016 um 6:05 Uhr

  • @Karsten status.name() ist angemessen, wenn Sie es im Code verwenden möchten (aus Gründen der Genauigkeit und Konsistenz), status.toString() ist geeignet, wenn Sie es dem Benutzer zeigen möchten (zur besseren Lesbarkeit).

    – intcreator

    16. November 2016 um 19:33 Uhr

Sie können verwenden values() Methode:

Zum Beispiel Status.values()[0] wird PAUSE in Ihrem Fall zurückgeben, wenn Sie es drucken, toString() wird aufgerufen und “PAUSE” wird gedruckt.

  • Stimmt, nur zur Ergänzung Status.values()[0] wäre Typ Status nicht String.

    – harsch

    19. Juli 2013 um 8:51 Uhr

Benutzer-Avatar
Biswajit Karmakar

Verwenden Sie den Standardmethodennamen (), wie unten angegeben

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());
    }
}

  • warum nicht toString überschreiben, um den Namen zurückzugeben?

    – Mohammed Housseyn Taleb

    6. Januar 2017 um 0:10 Uhr

  • Gibt was zurück? EINS oder eins, es gibt einen Unterschied (der Aufzählungsname oder sein Wert)

    – Quecksilber

    13. Februar 2017 um 0:03 Uhr

  • Wie drucke ich “Eins”, “Zwei”, ich meine den Wert String für die Aufzählung?

    – Arefe

    10. März 2021 um 3:11 Uhr

Sie können diese Methode zu Ihrer Status-Aufzählung 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
}

Ich glaube, enum hat ein .name() in seiner API, ziemlich einfach zu verwenden, wie in diesem Beispiel:

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

yourObject.security() 

und es gibt in diesem Beispiel High/Low als String zurück

Sie können die Methode custom values() verwenden:

public enum SortType {Scored, Lasted;

     public int value(){
         return this == Lasted ? 1:0;
     }
}

1245550cookie-checkAbrufen des String-Werts von Enum in Java

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy