在我的代码中,我有两个类,它们包含彼此的实例,它们都是 Parcelable。
有一个“Server”类,它可以拥有多个“Channel”类。我试图确定的是我是否只是在writeToParcel
andcreateFromParcel
方法中编写了一个无限循环?
这是一些代码:
//Server implementations
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {
NAME,
PASS,
PORT,
NICK,
ALT_NICK,
START_CHANNEL,
PORT,
WindowText});
Bundle channelBundle = new Bundle();
channelBundle.putParcelableArray("Channels", Channels);
dest.writeBundle(channelBundle);
}
//...
public IRCServer createFromParcel(Parcel in)
{
IRCServer ret = new IRCServer();
String[] Data = new String[8];
in.readStringArray(Data);
ret.NAME = Data[0];
ret.PASS = Data[1];
ret.PORT = Data[2];
ret.NICK = Data[3];
ret.ALT_NICK = Data[4];
ret.START_CHANNEL = Data[5];
ret.PORT = Data[6];
ret.WindowText = Data[7];
Bundle cBund = in.readBundle();
ret.Channels = (IRCChannel[])cBund.getParcelableArray("Channels");
return ret;
}
//Channel Implementation
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {
Name,
WindowText
});
dest.writeStringList(UserList);
Bundle ServerBundle = new Bundle();
ServerBundle.putParcelable("Server", server);
dest.writeBundle(ServerBundle);
}
//...
public IRCChannel createFromParcel(Parcel in)
{
IRCChannel ret = new IRCChannel();
String[] Data = new String[2];
in.readStringArray(Data);
ret.Name = Data[0];
ret.WindowText = Data[1];
in.readStringList(ret.UserList);
Bundle ser = in.readBundle();
ret.server = (IRCServer)ser.getParcelable("Server");
return ret;
}
其他一些注意事项:是的,通道内的服务器对象是对实际服务器对象的反向引用。是的,服务器内的每个 Channel 对象都包含此反向引用。
问题:一旦被告知执行第一个代码,此代码是否会无限循环创建包裹,或者它实际上是否安全。