私のコードには、お互いのインスタンスを含む 2 つのクラスがあり、どちらも Parcelable です。
複数の「チャネル」クラスを所有できる「サーバー」クラスがあります。私が判断しようとしているのは、メソッドwriteToParcel
とcreateFromParcel
メソッドに無限ループを書き込んだだけですか?
ここにいくつかのコードがあります:
//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;
}
その他の注意事項: はい、チャネル内の Server オブジェクトは、実際のサーバー オブジェクトへの後方参照です。はい、サーバー内の各 Channel オブジェクトには、この後方参照が含まれています。
質問: このコードは、最初のパーセルを実行するように指示されるとすぐに無限にループしてパーセルを作成するだけですか、それとも実際には安全ですか?