2009-09-03 73 views
6

我想通過生成一個自動序列版本ID來刪除某些類的一些警告。在Eclipse中,這樣做很簡單 - IDE可以自動生成一個並將其添加到類中。但是,我沒有在NetBeans中看到這個功能。是可用的麼?如果是這樣,它在哪裏?如果沒有,是否有一個可以啓用它的插件?NetBeans可以爲Java類生成自動序列版本ID嗎?

回答

9

其實我解決這個「問題」是停用我的項目配置的警告(我使用Eclipse,但我猜的NetBeans是一樣的)因爲恕我直言,這是一個錯誤的警告:沒有一serialVersion是最安全的選擇,因爲JVM在啓動時計算一個獨特的啓動(類似於類的哈希),同時明確地添加它,然後負責注意當您對代碼做出不兼容的更改時。因此,如果你不關心這個問題,最好避免這個值(這樣它只能兼容的版本,肯定是,但有一些誤報:它認爲這是不兼容的,但是事實上它會),而不是把那裏固定的價值,你會(可能,在我的情況下)忘記在需要時更新,導致實際的有效性錯誤(假消極:它認爲它是兼容的,但它不是)。

+3

這取決於你如何使用序列化。如果您將序列化跨不同JVM的類,即從一個JVM到另一個JVM,這可能會導致不兼容。 – Yishai 2009-09-03 13:19:37

+0

看起來這種方法對我目前的項目來說效果最好,但在NetBeans中,我沒有看到任何地方關閉此警告(並且有很多壓制警告註釋看起來很糟糕)。 – 2009-09-03 13:42:06

+0

我能找到它... – 2009-09-03 13:47:33

5

除非需要與現有的序列化實例保持兼容,否則手動操作也很簡單。就在這條線複製到類:

private static final long serialVersionUID = 1L; 

注意,是絕對的serialVersionUID是跨類唯一沒有要求。

+0

雖然這是一個很好的建議,但我決定忽略這個警告,因爲在這個特定的項目上這不是很重要。我只是不喜歡顯示的警告。 – 2009-09-03 13:48:25

1

在NetBeans禁用這些警告:

  1. 公開賽:工具 - >選項
  2. 公開賽:編輯 - >提示標籤
  3. 選擇語言:Java
  4. 個取消選中標準javac的警告 - >連載
  5. OK

我也不得不清除〜/的.netbeans/6.8/VAR /緩存,並重新啓動Netbeans的清除從任務列表中的警告。

0

(對於用戶是哪裏問同樣的問題現在)
我使用nb7.4,發現從nb6.5這個插件nb7.4
plugin
我nb7.4和工作進行了測試好。 對於servial版本ID外觀在
serialVersionUID
的意思,如果你加它明確你可以不更改UID都在改變你的課,直到你有沒有你的類系列化,在一些地方保存: 如果你創建A級連載它
結束然後將其存儲在數據庫
年底再改A級製作不與舊的A級更兼容,
當有人試圖從過去A類加載序列化對象的一類新的,他可以有問題。

當您更改類A並使其與最後一個類A不兼容時,您必須更改uid,因此如果有人試圖加載它,將會得到InvalidClassExceptions。