【问题标题】:Android Java cast long to enum problemAndroid Java cast long to enum 问题
【发布时间】:2011-08-27 08:26:12
【问题描述】:

Java 将 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

有什么建议可以解决这个问题吗?

【问题讨论】:

  • 您不能将原语转换为 Java 中的枚举类型。枚举的成员是对象,并且与任何支持从原始类型自动装箱的类型无关。简而言之,您需要编写一个为您进行转换的方法。
  • 这是我不知道该怎么做的事情......

标签: java android types casting


【解决方案1】:

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

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

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

如何实现 valueOf 方法取决于您 - 您可以遍历所有值的 EnumSet 以查找匹配项,或者创建一个从整数到 @ 的 HashMap 987654327@,或者可能只是一个数组(带有验证)。这将取决于您的枚举中的内容,以及要查看的值的数量。

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

【讨论】:

  • 实际上对于我的问题中的示例,这是最好的方法吗?
  • @Bombastic:只有几个值,我可能只使用 switch 语句。但是,如果你被赋予不同的价值,你应该怎么做取决于你从哪里获得价值等。
  • 所以基本上我做了这样的事情:switch(value){ case PT_JSON: {****} } 我明白了 switch 的想法,但不确定该怎么做才能得到这些东西为我工作...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2022-01-14
  • 2014-03-07
相关资源
最近更新 更多