2013-04-02 86 views
0

在Java中,我試圖從字符串中獲取枚舉值。從字符串構造函數獲取枚舉值

比如我:

MESSENGERINIT("@L")

這是枚舉,以及:

private String header; 

private ServerPackets(String header) 
{ 
    this.header = header; 
} 

public String getHeader() 
{ 
    return this.header; 
    //more code here. 
} 

但是,如果我嘗試使用:

System.out.println("[" + ServerPackets.valueOf(header) + 
    "] - Received unregistered header " + 
    Base64Encoding.decode(header) + "(" + header + ") with body " + 
    connection.reader.toString()); 

我得到這個錯誤:

java.lang.IllegalArgumentException: No enum constant 
[email protected] 
    at java.lang.Enum.valueOf(Unknown Source)</code> 

錯誤信息是什麼意思,我做錯了什麼?

回答

6

Enum.valueof(String)使用枚舉數的名稱 - MESSENGERINIT - 不是傳遞給構造函數的字符串。

如果要將其他字符串映射到枚舉器,請考慮在枚舉器類中創建一個靜態映射。

例如:

enum ServerPackets { 
... 

private static Map<String,ServerPackets> s_map = new HashMap<String,ServerPackets>(); 
static { 
    map.put("@L", MESSENGERINIT); 
    ... 
} 
public ServerPackets getEnumFromHeader(String header) { 
    return map.get(header); 
} 
+0

有沒有辦法通過構造函數的字符串來獲取枚舉值的名字嗎? –

+3

+1您可以創建一個靜態'fromString(String s)'方法遍歷'ServerPackets.values()'並返回匹配的枚舉(如果找到)。 – Axel

+0

不要忘記'enum.valueOf(String)'方法。 – OldCurmudgeon