我正在开发一个测试应用程序,它需要连接到服务器并保存来自它的响应。响应实际上是一个数据包,所以我需要了解它是什么类型的数据包并执行它。现在我可以收到响应,计算数据包,现在我需要一点帮助切换方法我想要获取数据包类型。
以下是我正在使用的代码:
RPCPacket packet=null;
switch(RPCPacketType.getPacketTypeByValue(pType)){
case ST_OBJECT_TYPE_INFO_START:
{
packet = new InfoStartRPCPacket( objectIdentificator,
RPCPacketType.getPacketTypeByValue(pType),
RPCOperationType.getByValue(Integer.parseInt(operation)),
objectId,
id,
Integer.parseInt(size),
hash,
RPCPacketDataType.getByValue(dataType),
first );
break;
}
case ST_OBJECT_TYPE_INFO_END:{
packet = new InfoEndRPCPacket();
break;
}
case ST_OBJECT_TYPE_INFO_ERROR:{
packet = new InfoErrorRPCPacket();
break;
}
// Basic packets
case ST_OBJECT_TYPE_COLLECTION:{
packet = new CollectionRPCPacket();
break;
}
case ST_OBJECT_TYPE_CATEGORY:{
packet = new CategoryRPCPacket();
break;
}
case ST_OBJECT_TYPE_CARD:{
packet = new CardRPCPacket();
break;
}
case ST_OBJECT_TYPE_MESSAGE:{
packet = new MessageRPCPacket();
break;
}
case ST_OBJECT_TYPE_GENRE:{
packet = new GenreRPCPacket();
break;
}
case ST_OBJECT_TYPE_TAG:{
packet = new TagRPCPacket();
break;
}
case ST_OBJECT_TYPE_USER:{
packet = new UserRPCPacket();
break;
}
case ST_OBJECT_TYPE_CARDSTATS_CATEGORY:{
packet = new CardStatsCategoryRPCPacket();
break;
}
case ST_OBJECT_TYPE_CONTENT:{
packet = new ContentRPCPacket();
break;
}
// Media packets
case ST_OBJECT_TYPE_MEDIA_COLLECTION:{
packet = new MediaCollectionRPCPacket();
break;
}
case ST_OBJECT_TYPE_MEDIA_CATEGORY:{
packet = new MediaCategoryRPCPacket();
break;
}
case ST_OBJECT_TYPE_MEDIA_CARD:{
packet = new MediaCardRPCPacket();
break;
}
case ST_OBJECT_TYPE_MEDIA_TAG:{
packet = new MediaTagRPCPacket();
break;
}
case ST_OBJECT_TYPE_MEDIA_COLLECTION_BUTTON:{
packet = new MediaCollectionButtonRPCPacket();
break;
}
// unknown packet
default: {
packet=null;
break;
}
}
我需要一种方法能够在检查所有开关之后将数据包初始化为InfoStartRPCPacket或其他不同的东西。基本上我希望能够在开关外做这样的事情:
packet.executeInfoStartPacket(/*params*/); , when executeInfoStartPacket is a method in InfoStartRPCPacket class.
有任何建议怎么做?
答案 0 :(得分:1)
你不能真的这样做,你不应该这样做。
相反,您可以在abstract
类中使用名为RPCPacket
的{{1}}方法(可能提供任何必要的上下文作为参数),并在每个特定的子类中重载该方法。
这样,特定于数据包的代码可以自动访问所有特定于数据包的字段和方法。