繁体   English   中英

Android Java长期存在问题

[英]Android Java cast long to enum problem

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

任何建议如何解决?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM