2013-07-19 4 views
50

У меня есть перечисление, определенное как это, и я хотел бы иметь возможность получать строки для отдельных статусов. Как написать такой метод?Получение значения строки из перечисления в Java

Я могу получить значения int для статусов, но также хотел бы получить значения строк из 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; 
    } 
} 
+7

Статус з = Status.PAUSE; System.out.println (s.name()); –

+0

Этот ответ поможет вам понять http://stackoverflow.com/questions/17606866/how-to-set-a-value-of-a-variable-of-an-object-in-an-arraylist/17607004#17607004 –

+0

вы хотите получить PAUSE из целого числа 1? –

ответ

43

Вы можете использовать values() метод:

Например Status.values()[0] вернется PAUSE в вашем случае, если вы распечатать его, toString() будет называться и «PAUSE» будет печататься.

+0

Правильно, просто для добавления 'Status.values ​​() [0]' будет иметь тип 'Status', а не' String'. – harsh

+0

@harsh Я разъяснил свой ответ, надеюсь, что это сделано сейчас. – Juvanis

80

если status имеет тип Status перечислимого, status.name() даст вам свое определенное имя.

+5

Является ли это их причиной, это не отмечено как правильно? Кажется, лучший ответ –

+2

@JoeMaher 'toString()', по-видимому, является предпочтительным способом в соответствии с официальной документацией: «Большинство программистов должны использовать метод toString(), предпочитая это, так как метод toString может возвращать более пользовательский интерфейс, Дружественное имя." (http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#name()) – Carsten

+3

@Carsten 'status.name()' подходит, если вы хотите использовать его в код (для точности и согласованности), 'status.toString()' подходит, если вы хотите показать его пользователю (для удобства чтения). – brandaemon

4

Вы можете добавить этот метод к вашему Статус перечисления:

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

Используйте имя метода по умолчанию() в качестве данных мехов

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

Почему бы не переопределить toString, чтобы вернуть имя? –

+2

Возвращает что? Один или один, есть разница (имя перечисления или его значение) – Mercury

0

Я считаю, что перечисление есть .name() в API, очень прост в использовании как в этом примере:

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

    private enum Security { 
      low, 
      high 
    } 

с этим вы можете просто позвонить

yourObject.security() 

и возвращает высокий/низкий, как строки, в данном примере

Смежные вопросы