簡體   English   中英

如何序列化包含不可序列化對象的最終字段

[英]How to serialize a final field containing a non-serializable object

我的不可變類(所有字段均為final)包含對未實現Serializable的第三方類的對象的引用。 通常的解決方法是(如如何在Java中序列化不可序列化的接受答案中所述 )使用writeObjectreadObject方法創建自定義序列化格式。 但是, readObject不是構造函數,因此無法更新final字段。 我已經看到使用readResolve解決此問題的建議 ,但是看不到它如何工作,因為我看不到如何獲取將final字段初始化為該方法所必需的數據(顯然,它只能訪問我已經初始化的字段,我真的不希望在對象中創建一個新的可變字段,以便在反序列化期間臨時使用該字段(當該對象應該是完全不變的時)。 那么如何使反序列化工作呢?

public class ThisDoesntWork implements Serializable
{
   private final transient SomeNonSerializableClass object;
   private void writeObject (ObjectOutputStream out) throws IOException
   {
      out.writeUTF (object.toString());
   }
   private void readObject (ObjectInputStream in) throws IOException
   {
      object = SomeNonSerializableClass.fromString(in.readUTF()); // error!
   }
}

您可以使用writeReplace()編寫不同 (代理)類的對象,並使用readResolve()根據代理中的值構造原始類的對象。 構造函數可以設置final字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM