Android Java - 切换问题
我正在开发一个测试应用程序,它需要连接到服务器并保存来自服务器的响应。响应实际上是一个数据包,所以我需要了解它是什么类型的数据包并执行它。现在我可以接收响应,计算数据包,现在我需要一些关于我想要的 switch 方法的帮助获取数据包类型。
这是我正在使用的代码:
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.
任何建议如何这样做吗?
I'm working on a test application which requires connection to server and save the response from it. The response actually is a data packet,so I need to understand what type of packet it is and to execute it.For now I can receive the response, calculate the data packet and now I need a little help with switch method where I want to get the packet type.
Here is the code I'm using :
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;
}
}
I need a way to be able to initialize the packet as InfoStartRPCPacket or something different after I check the all switches.Basically I want to be able to do something like this outside switch :
packet.executeInfoStartPacket(/*params*/); , when executeInfoStartPacket is a method in InfoStartRPCPacket class.
Any suggestions how to do that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你真的不能这么做,也不应该这么做。
相反,您可以在
RPCPacket
类中有一个名为process()
的abstract
方法(可能提供任何必要的上下文作为参数),并在每个具体子类。这样,特定于数据包的代码可以自动访问所有特定于数据包的字段和方法。
You can't really do that and you shouldn't.
Instead you could have an
abstract
method in yourRPCPacket
class calledprocess()
(possibly giving any necessary context as parameters) and overload that in each specific sub-class.This way the packet-specific code automatically has access to all the packet-specific fields and methods.