Java アプリケーションのいくつかのアクションの状態の履歴を保存する必要があります。これを後でリロードして、特定のアクションで状態を復元することができます。言い換えれば、状態が関連付けられた画面があり、いつでも画面の状態を復元できるように、それと履歴の変更を保存する必要があります。これは「元に戻す」のようなものですが、2 つの状態の違いが非常に大きくなる可能性があり、状態を変更する明確に定義されたアクションがないため、厳密にはそうではありません。
例を挙げて説明しましょう。非常に基本的な画面状態には、1 つのマップのみが含まれる場合があります。状態 A では、この Map にはキー「Key1」を持つ「Object1」とキー「Key2」を持つ「Object2」への参照が含まれています。状態 B では、Map には「Object1」への参照がまだ含まれていますが、「Object2」が変更され、「Object3」が追加されています。ここで、状態 A に戻れるようにする必要があります。これには、Object3 を「ドロップ」し、Object2 を以前の状態に復元する必要があります。Object2 にどのような変更が加えられたか、Object2 のタイプさえもわからないため、カスタムの「元に戻すアクション」を定義できません。さらに、状態 A と B の Object2 の参照は同じままであるため、これらの変更は状態 A に反映され、Object2 は以前と同じではありません。
クローン メソッドを実装することが最善の解決策であると認識していますが、すべてのタイプのオブジェクト (プリミティブと標準コレクションを含む) をサポートする必要があるため、これは実現不可能です。状態遷移が発生するとすぐに Map をシリアル化し、再び必要になったときにそれを逆シリアル化する、シリアライズ可能なものを使用することを考えましたが、非常に醜い解決策のようです。
他のアイデアはありますか?ありがとう、リストレット