在Java中,我试图从字符串中获取枚举值.
比如我得到了:
MESSENGERINIT("@L")
这也是枚举:
private String header;
private ServerPackets(String header)
{
this.header = header;
}
public String getHeader()
{
return this.header;
//more code here.
}
Run Code Online (Sandbox Code Playgroud)
但如果我尝试使用:
System.out.println("[" + ServerPackets.valueOf(header) +
"] - Received unregistered header " +
Base64Encoding.decode(header) + "(" + header + ") with body " +
connection.reader.toString());
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
java.lang.IllegalArgumentException: No enum constant
com.kultakala.communication.ServerPackets.@L
at java.lang.Enum.valueOf(Unknown Source)</code>
Run Code Online (Sandbox Code Playgroud)
错误消息的含义是什么?我做错了什么?
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 );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2658 次 |
| 最近记录: |