簡體   English   中英

如何使擴展非序列化的Java類可序列化

[英]How to make a java class serializable that extends a non serializable

MyClass1 extends MyClass2 implements Serializable

我正在嘗試通過使用HashMap上的android應用程序中使用saveOnInstanceState

 savedInstanceState.getSerializable()

我已經使用了其他使用自定義類的哈希表來做到這一點,但是通過將這些類設置為可序列化,但是即使我將其設置為可序列化之后,由於MyClass2不可序列化,我似乎還是會出現錯誤。 MyClass2是第三方庫,因此我無法對其進行修改並使其可序列化,我可以做什么?

謝謝!

正如Jan的回答所述,您通常無法執行此操作。 在某些情況下,有一些解決方法可以使它實現,但是即使工作了,它們也會變得有些脆弱。 為了有這個機會,您需要滿足以下條件:

  • 您對超級類結構有足夠的了解,以了解捕獲其當前狀態所需的數據。
  • 您需要(通過公共或受保護的成員變量或通過類似getter的方法)訪問捕獲其當前狀態所需的數據。
  • 您需要具有訪問權限(通過公共或受保護的成員變量或通過setter之類的東西)來更改重構其當前狀態所需的數據字段。
  • 您需要使用serialPersistentFields方法或精心構造的一對writeObject / readObject實現,以在序列化和反序列化期間保存/讀取超類的數據。 這必然需要了解和訪問前面的項目符號中描述的超類結構。
  • 超類必須具有無參數構造函數。 (這與序列化無關緊要,但是在反序列化時將需要它。)

當然,在完成所有這些操作后,您將使用一些有關超類的知識,這意味着,如果超類的實現發生變化,則可能會以難以發現的方式中斷。

不幸的是你不能。 如果可以做到這一點,那將是一個安全漏洞,因為即使不應該對類進行序列化,您也可以對其進行序列化。

暫無
暫無

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

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