Android Java长期存在问题

时间:2011-08-27 08:26:12

标签: java android types casting

我有一个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

有任何建议如何解决?

1 个答案:

答案 0 :(得分:2)

您需要编写一个方法,可能在RPCPacketDataType:

public static RPCPacketDataType valueOf(int value) {
    ...
}

然后从你的案例陈述中调用它。鉴于该值只能是整数,您几乎肯定会使用Integer.parseInt而不是Long.parseLong

如何实施valueOf方法取决于您 - 您可以遍历尝试查找匹配项的所有值的EnumSet,或创建{{1}从Integer到HashMap,或者可能只是一个数组(带有验证)。它取决于你的枚举中的内容,以及需要查看的值。

请注意,如果RPCPacketDataType传递的值与任何枚举值不对应,您还应该考虑如何做 - 一个选项是返回valueOf(并且可能会明确地测试调用代码);另一个是抛出异常。