2013-07-19 63 views
50

我有一個像這樣定義的枚舉,我希望能夠獲取各個狀態的字符串。我應該如何寫這種方法?從Java中的枚舉中獲取字符串值

我可以獲取狀態的int值,但希望從int獲取字符串值的選項。

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

狀態S = 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

你想從整數1得到暫停? –

回答

43

您可以使用values()方法:

例如Status.values()[0]將你的情況恢復暫停,如果你打印出來,toString()將被調用,「暫停」將被打印。

+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

我相信枚舉有一個。名稱()它的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() 

並將其返回高/低作爲字符串,在該示例