我有一个Java Cast long类型到Enum类型的问题。 我正在使用此代码:
public enum RPCPacketDataType {
PT_JSON(1),
PT_BINARY(2);
private int value;
RPCPacketDataType(int i){
this.value=i;
}
public int getNumericType(){
return value;
}
}
static RPCPacketDataType tmpPacket_packetType;
我需要做这样的事情:
case 2:
{
long intVal = Long.parseLong(thisPart);
if(intVal == 0){
isBad = true; break;
}
tmpPacket_packetType=intVal;
break;
}
其中thisPart只是一个字符串:String thisPart;
错误说:Type mismatch: cannot convert from long to RPCCommucatorDefines.RPCPacketDataType
有任何建议如何解决?
答案 0 :(得分:2)
您需要编写一个方法,可能在RPCPacketDataType:
中public static RPCPacketDataType valueOf(int value) {
...
}
然后从你的案例陈述中调用它。鉴于该值只能是整数,您几乎肯定会使用Integer.parseInt
而不是Long.parseLong
。
如何实施valueOf
方法取决于您 - 您可以遍历尝试查找匹配项的所有值的EnumSet
,或创建{{1}从Integer到HashMap
,或者可能只是一个数组(带有验证)。它取决于你的枚举中的内容,以及需要查看的值。
请注意,如果RPCPacketDataType
传递的值与任何枚举值不对应,您还应该考虑如何做 - 一个选项是返回valueOf
(并且可能会明确地测试调用代码);另一个是抛出异常。