簡體   English   中英

Java,序列化非靜態內部類。 有把戲嗎?

[英]Java, serializing non-static inner classes. Is there a trick?

我想在我的java程序中序列化一個非靜態內部類。 盡管這是不允許的,因為我的內部類(默認情況下)具有對其外部類的引用(在這種情況下,該類是不可序列化的),因此,如果我嘗試對其進行序列化,則會得到外部類的NullPointerException。

那么,有沒有一種方法可以覆蓋對外部類的引用,並將其設置為瞬態,以便在每次創建內部類的對象時都不會通過初始化進行序列化?

您不能:如果內部類不是static ,則其初始化狀態根據定義取決於外部類的實例。 這是因為,如果沒有外部類的實例開始,就無法獲得內部類的實例。

而且,由於外部類不可Serializable ,因此無法序列化外部類的實例,因此無法序列化內部類的實例。

或者只是使內部類靜態化並完成它...

您不能對包含的實例進行隱式引用transient ,但是您可以做的是重新設計使其成為一個嵌套的(靜態)類,並在構造函數參數中顯式傳遞該包含的實例。 然后,在嵌套類中需要一個顯式變量,將其標記為transient

自動序列化有一些負面影響:如果您更改字段名稱或更改字段的可見性,那么反序列化將無法正常進行,而且還需要:“自動”保存更多的空間對象。 由於這個原因,幾乎我總是手動對類進行序列化/反序列化:寫一個int,寫一個字符串而不是讀回它。 使用此方法,您可以根據需要編寫非靜態的內部類反序列化

暫無
暫無

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

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