質問をよく読んでいないようです。循環参照を含む可能性のあるプロパティのシリアル化に関心があるようです。この仮定が正しくなく、循環参照を含むこれらのオブジェクトをシリアル化しないことで問題がない場合は、以下の私の元の回答を参照してください。
新しい答え
どのオブジェクトがシリアル化されているかを追跡する必要があると思います。自分で実行しない限り、これが発生していることはわかりません。しかし、それはそれほど難しいことではないはずです。
循環参照を含むこれらのオブジェクトではtransient boolean
、オブジェクトがすでにシリアル化されているかどうかを表すことができます。次に、デフォルトのシリアル化動作をオーバーライドする必要がありますが、これは数行で実行できます。
public void writeExternal(ObjectOutput out) {
if(!out.serialized) {
out.serializeMethod();
}
out.serialized = true;
}
元の回答
キーワードを見てくださいtransient
transient
ほとんどのシリアル化ライブラリがキーワードを尊重すると思います。メンバーである場合、transient
それはシリアル化から除外されることを意味します。
class Something {
private Dog dog; // I will be serialized upon serialization.
private transient SomethingElse somethingElse; // I will not be serialized upon serialization.
}
class SomethingElse {
private Cat cat; // I will be serialized upon serialization.
private transient Something something; // I will not be serialized upon serialization.
}
上記のシナリオと同様の再帰メンバーがある場合はtransient
、このオーバーフローが発生しないように、一方または他方(または両方)にマークを付ける必要があります。