2011-08-27 25 views
0

我有一个问题Java投入长类型Enum的类型。 我使用这个代码:Android Java投入很长时间以枚举问题

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

您不能在Java中将枚举类型转换为枚举类型。枚举的成员是对象,并且与支持从原始类型自动装箱的任何类型都不相关。总之,您需要编写一个方法来为您进行转换。 – aroth

+0

这是我不知道该怎么做的事情...... –

回答

2

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

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

然后调用从你的case语句。由于该值只能是一个整数,因此几乎肯定应该使用Integer.parseInt而不是Long.parseLong

你如何实现valueOf方法是由你 - 你迭代通过所有值的EnumSet试图找到一个匹配,或创建整数HashMapRPCPacketDataType,或可能只是一个阵列(验证) 。这将取决于你的枚举中有什么,以及有多少值需要查看。

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

+0

其实对于我的问题中的例子,哪种方法是最好的? –

+0

@Bombastic:只有几个值,我可能只是使用switch语句。但是,如果给出不同的值,你应该怎么做将取决于你从哪里获得价值等。 –

+0

所以基本上我做了这样的事情:switch(value){case PT_JSON:{****}}我用这个开关得到了想法,但不知道该怎么做才能让这些东西适合我...... –