2013-07-19 12 views
50

Ich habe eine Enum wie folgt definiert und möchte die Strings für die einzelnen Status erhalten können. Wie soll ich eine solche Methode schreiben?String Wert aus Enum in Java

Ich kann die int-Werte der Status abrufen, möchte aber auch die String-Werte von den INTS bekommen.

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; 
    } 
} 
+7

Der Status s = Status.PAUSE; System.out.println (s.name()); –

+0

Diese Antwort wird Ihnen helfen, http://stackoverflow.com/questions/17606866/how-to-set-a-value-of-a-variable-of-an-object-in-an-arylist/17607004#17607004 zu verstehen –

+0

Sie möchten PAUSE von Ganzzahl 1 erhalten? –

Antwort

43

können Sie values() Methode verwenden:

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

+0

Richtig, nur 'Status.values ​​() [0]' hinzuzufügen wäre vom Typ 'Status' nicht' String'. – harsh

+0

@harsh Ich habe meine Antwort geklärt, hoffe, es ist jetzt erledigt. – Juvanis

80

wenn status von Status Enum-Typ ist, status.name() geben Ihnen seinen definierten Namen.

+5

Ist dies ein Grund, dass dies nicht als korrekt markiert ist? Scheint die bessere Antwort –

+2

@JoeMaher 'toString()' scheint der bevorzugte Weg zu sein wie in der offiziellen Dokumentation: "Die meisten Programmierer sollten die toString() - Methode vor dieser verwenden, da die toString-Methode möglicherweise mehr Benutzer zurückgibt. freundlicher Name. " (http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#name()) – Carsten

+3

@Carsten 'status.name()' ist geeignet, wenn Sie es in verwenden möchten Der Code (für Genauigkeit und Konsistenz), "status.toString()" ist geeignet, wenn Sie es dem Benutzer zeigen möchten (zur besseren Lesbarkeit). – brandaemon

4

Sie können diese Methode Ihrem Status ENUM 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 
} 
9

Standardmethode verwenden name() als gegeben 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()); 
    } 
} 
+0

Warum überschreibt toString den Namen zurück? –

+2

Gibt was zurück? Eins oder eins, es gibt einen Unterschied (der Name des Namens oder sein Wert) – Mercury

0

Ich glaube Enum eine .name() in seiner API haben, ziemlich einfach wie in diesem Beispiel verwenden:

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 Sie einfach

anrufen
yourObject.security() 

und es gibt hoch/niedrig wie String, in diesem Beispiel