- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:デシリアライズでオブジェクトを正常に復元できない。)
デシリアライズでオブジェクトを正常に復元できない
このQ&Aのポイント
- シリアライズは成功するものの、デシリアライズで復元されたオブジェクトの内容が正しくない状況になっています。
- 復元されたはずのフィールドが参照するオブジェクトがnullとなり、正常な復元ができていないことが起きています。
- ソースコードを確認しても問題の解明には至らず、どうにか解決策を見つけたいと思っています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
あらあら、とんでもない勘違いをしているようね。 まず デシリアライズは成功しているはずよ。 デシリアライズまでのコードにミスはないわ。 勘違いしているのは別のところよ。 簡単なサンプルをあげるわ。 研究してみて。 public class Test { private String str; public Test(String s) { this.str = s; } public String toString() { return this.str; } public static void change(Test t) { t = new Test("xyz"); } public static void main(String[] args) { Test t = new Test("abc"); Test.change(t); System.out.println(t); } } ※コンパイルも何もしていないので少々の間違いがあるかも? このTestクラスを動かしたときに出力される結果を予測して頂戴。 あなたの作ったReadMainクラスならきっとxyzが出力されるはずよ。 でも実際は・・・。 熟練者もたまに間違える参照の罠。 これが答えよ!
お礼
お世話になっております。 なんという事でしょう。 デシリアライズを行うメソッドの仮引数が違うオブジェクトを参照する様になっただけで、 呼び出し側の実引数は元の参照を保ったままだったとは。 こんな初歩的なミスで大はまりしてしまうとは情けない限りです。 その上自分で解決する事を放棄してしまっていただなんて……。 askaaska様の実に的確なヒントによって問題は無事解決しました。 (復元したオブジェクトを戻す様に件のメソッドの実装を修正し、無事動作する事を確認しました) 今後はこういった初歩的な部分のバグが潜んでいないかどうかを、よく確認するようにしていこうと思います。 本当にありがとうございました。