3 回答

TA貢獻(xiàn)1799條經(jīng)驗 獲得超9個贊
從javadoc:
序列化運行時與每個可序列化的類關(guān)聯(lián)一個版本號,稱為serialVersionUID,在反序列化過程中使用該版本號來驗證序列化對象的發(fā)送者和接收者是否已加載了該對象的與序列化兼容的類。如果接收者為對象加載的類serialVersionUID與相應(yīng)的發(fā)送者的類不同,則反序列化將導(dǎo)致InvalidClassException。可序列化的類可以serialVersionUID通過聲明一個"serialVersionUID"必須為靜態(tài),最終且類型為long 的字段來顯式聲明其自身:
您可以將IDE配置為:
忽略它,而不是發(fā)出警告。
自動生成一個id
根據(jù)您的其他問題“可能是所討論的警告消息是我的GUI應(yīng)用程序凍結(jié)的原因嗎?”:
不,不可能。僅當(dāng)序列化對象并在類已更改的其他位置(或時間)對對象進(jìn)行反序列化時,它才可能導(dǎo)致問題,并且不會導(dǎo)致凍結(jié),而會導(dǎo)致凍結(jié)InvalidClassException。

TA貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊
警告的原因已在此處記錄,簡單的修復(fù)方法是關(guān)閉警告或在代碼中添加以下聲明以提供版本UID。實際值無關(guān)緊要,如果愿意,可以從999開始,但是在對類進(jìn)行不兼容的更改時,請更改為實際值。
public class HelloWorldSwing extends JFrame {
JTextArea m_resultArea = new JTextArea(6, 30);
private static final long serialVersionUID = 1L;

TA貢獻(xiàn)1790條經(jīng)驗 獲得超9個贊
到目前為止,其他答案都有很多技術(shù)信息。我將嘗試按要求用簡單的方式回答。
如果要將對象轉(zhuǎn)儲到原始緩沖區(qū),將其保存到磁盤,以二進(jìn)制流傳輸(例如,通過網(wǎng)絡(luò)套接字發(fā)送對象)或以其他方式創(chuàng)建序列化對象,則對對象實例進(jìn)行序列化對象的二進(jìn)制表示形式。(有關(guān)序列化的更多信息,請參見Wikipedia上的Java序列化)。
如果您不想序列化您的類,則可以在類上方添加注釋@SuppressWarnings("serial")。
如果要序列化,那么您將有很多事情要擔(dān)心,所有問題都圍繞UUID的正確使用?;旧?,UUID是一種“版本化”您要序列化的對象的方法,這樣,無論是反序列化的進(jìn)程都知道它已正確地反序列化。我將查看確保序列化對象的正確版本控制以獲取更多信息。
添加回答
舉報