我正在尝试将 Objective C 代码转换为 Java,但我在理解如何执行此操作时遇到了一些问题。
这是 Objective C 代码:
+ (StPacket *)initialize:(UInt32)aPacketId packetType:(StPacketType)aPacketType operationType:(StOperationType)aOperationType
objectOid:(NSString*)aObjectOid objectId:(UInt32)aObjectId dataSize:(UInt32)aDataSize dataHash:(NSString*)aDataHash
dataType:(StPacketDataType)aDataType packetData:(NSData*)aPacketData {
StPacket * packet = nil;
switch (aPacketType)
{
// Special packets
case ST_OBJECT_TYPE_INFO_START:
{
packet = [[StPacketInfoStart alloc] init];
break;
}
case ST_OBJECT_TYPE_INFO_END:
{
packet = [[StPacketInfoEnd alloc] init];
break;
}
}
if (packet)
{
[packet setPacketData:aPacketId packetType:aPacketType operationType:aOperationType objectOid:aObjectOid objectId:aObjectId
dataSize:aDataSize dataHash:aDataHash dataType:aDataType packetData:aPacketData];
}
return [packet autorelease];
}
StPacketInfoStart 初始化:
- (id)init {
self = [super init];
if (self)
{
locale = nil;
serverApiVer = nil;
deviceId = 0;
}
return self;
}
所以我用 Java 做了这样的事情:
public RPCPacket( int apacketId,
RPCPacketType apacketType,
RPCOperationType aoperationType,
String[] aobjectOid,
int aobjectId,
int adataSize,
String[] adataHash,
RPCPacketDataType adataType){
RPCPacket packet=null;
switch(apacketType){
case ST_OBJECT_TYPE_INFO_START:
{
packet = new InfoStartRPCPacket();
break;
}
case ST_OBJECT_TYPE_INFO_END:
{
packet = new InfoEndRPCPacket();
break;
}
}
packet = new RPCPacket(adataSize, apacketType, aoperationType, adataHash, adataSize, adataSize, adataHash, adataType);
}
我的问题是,这是正确的方法吗?Java 中的代码是否与 Objective C 中的代码执行相同的操作,因为现在我收到一个错误,内容为“默认情况下隐式 super 构造函数 RPCPacket() 未定义”构造函数。必须定义一个显式构造函数”。 有什么想法吗?
最佳答案
我不谈论 Objective-C,但我很确定你不会做同样的事情,因为 Java 代码不正确:
从错误消息(和名称)中,我认为您的 RPCPacket“方法”是一个构造函数。如果您希望每当有人使用带有适当参数的 new RPCPacket()
时调用它,那就没问题。
但是在构造函数的末尾,您*创建一个新的RPCPacket
对象,这几乎总是一个错误:已经有一个新的is构造函数运行时的 RPCPacket 对象。可以使用 this
(或隐式)访问它,并且需要由该代码初始化。
因此,您应该简单地将字段设置为适当的值,而不是尝试在该方法中创建新的 RPCPacket
对象。
关于java - 将 Objective C 转换为 Java Android 的小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7228342/