2014-03-26 71 views
0

我想序列化Java類,因爲警告:The serializable class GuiLote does not declare a static final serialVersionUID field of type long。 Eclipse的建議這兩個選項: 添加默認的串行版本ID添加產生的串行版本ID。他們之間有什麼不同? Eclipse中添加此爲默認串行版本ID:可序列化類GuiLote沒有聲明long類型的靜態final serialVersionUID字段

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

或將它用於產生串行版本ID:

/** 
* 
*/ 
private static final long serialVersionUID = 8534363180966005148L; 

這是我的代碼:

public class GuiLote extends JInternalFrame implements ActionListener { ... }

+0

[爲什麼生成long serialVersionUID而不是簡單的1L?]可能的重複(http://stackoverflow.com/questions/888335/why-generate-long-serialversionuid-instead-of-a-simple-1l) – SharpKnight

回答

1

串行版本ID用於確定對象的序列化版本(來自磁盤,網絡等)是否可以反序列化到當前應用程序中。如果ID-s匹配,則該對象反序列化,否則會拋出異常。基本上默認意味着它被設置爲1,生成將計算一個唯一的數字考慮到班級中的所有字段。

如果您的對象的較舊錶示法被反序列化,並且有舊字段中沒有的新字段,則這些字段將以空值出現。因此,您有一個選擇,要麼快速失敗,要麼拒絕反序列化,如果版本不匹配或與空值一起生活,並保持與序列化數據的向後兼容性。

相關問題