2013-07-19 15 views
50

Mam tak zdefiniowaną wyliczkę i chciałbym móc uzyskać ciągi dla poszczególnych statusów. Jak mam napisać taką metodę?Uzyskiwanie wartości ciągu z wyliczenia w języku Java

Mogę uzyskać wartości int stanów, ale chciałbym również uzyskać wartości ciągów od intów.

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

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

+0

Ta odpowiedź pomoże ci zrozumieć http://stackoverflow.com/questions/17606866/how-to-set-a-value-of-a-varble-of-an-object-in-an-arraylist/17607004#17607004 –

+0

chcesz uzyskać PAUSE od liczby całkowitej 1? –

Odpowiedz

43

Można użyć values() metody:

Na przykład Status.values()[0] powróci przerwa w twoim przypadku, jeśli go wydrukować, toString() będzie nazwane i „PAUSE” zostanie wydrukowany.

+0

W prawo, aby dodać 'Status.values ​​() [0]' byłoby typu 'Status', a nie' Ciąg'. – harsh

+0

@harsh Wyjaśniłem moją odpowiedź, mam nadzieję, że teraz to zrobione. – Juvanis

80

jeśli status jest typu Status wyliczenia, status.name() daje jej określoną nazwę.

+5

Czy jest to powód, dla którego nie jest to oznaczone jako prawidłowe? Wydaje się, że lepsza odpowiedź: –

+2

@JoeMaher 'toString()' wydaje się być preferowaną metodą, zgodnie z oficjalną dokumentacją: "Większość programistów powinna używać metody toString() zamiast tej, ponieważ metoda toString może zwrócić więcej użytkowników. przyjazne imię." (http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#name()) – Carsten

+3

@Carsten 'status.name()' jest odpowiednie, jeśli chcesz go użyć w kod (dla dokładności i spójności), 'status.toString()' jest odpowiedni, jeśli chcesz pokazać go użytkownikowi (dla czytelności). – brandaemon

4

Możesz dodać tę metodę do wyliczenia 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 
} 
9

Użyj nazwy domyślnej metody() jako podanymi mieszek

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

dlaczego nie przesłonić toString, aby zwrócić nazwę? –

+2

Co zwraca? JEDEN lub jeden, istnieje różnica (nazwa wyliczeniowa lub jej wartość) – Mercury

0

wierzę wyliczenia mają pola .Name() w jego API bardzo prosty w użyciu jak w poniższym przykładzie:

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

    private enum Security { 
      low, 
      high 
    } 

Z tego można po prostu zadzwonić

yourObject.security() 

i zwraca wysoki/niski w ciągu, w tym przykładzie

Powiązane problemy