2009-12-06 99 views
1

是否有可能使用比較器序列化TreeMap?Java序列化比較器

我測試過,它沒有比較器的序列化樹形圖,當你添加比較器時,它會拋出一個異常。

如果我將比較器聲明爲transient,它仍然不起作用。它只有在我使每個樹形圖都是瞬態的時候才起作用,但在這種情況下它不會序列化樹。

+0

你試圖序列化哪個類的對象? –

+0

程序中的所有類都在實現和導入序列化。 這是一個動物園課 – d0pe

+2

請提供例外。這聽起來像你的比較器不是可序列化的,但堆棧跟蹤將顯示哪個類失敗。 – PSpeed

回答

8

您試圖序列化的所有類必須實現java.io.Serializable接口。另外,你班裏的每個成員變量應該是Serializable。事實上,你的整個層次應該是。

+0

這**必須**是正確的答案。 http://java.sun.com/j2se/1.4.2/docs/api/java/io/NotSerializableException.html – pstanton

+0

這可能是問題,我已經gogoled了一下,不知道是否比較樹圖是可序列化的 – d0pe

+0

TreeMap是可序列化的。在別處看看。 – Bozho

0

如需更多幫助,請看this。其他的事情要考慮(如本文中提到的和其他地方):

  • 版本
  • 爲對象的自定義序列形式
  • 你的對象的字段應該被序列化的,哪些是短暫
+0

這是馬丁的問題。 – pstanton

+0

我讀了它,並在它的形式出現樹形圖可串行化,因爲它是和現場比較在那裏,但經過一些測試它也無法正常工作。 我正在尋找此頁面: http://www.cs.chalmers.se/~catarina/java1.5/jsr-14-public-draft/collections-javadoc/serialized-form.html – d0pe

-1

您可能會發現它與將比較器字段更改爲靜態而非實例成員一樣簡單:

public final static Comparator<String> ID_IGN_CASE_COMP 

您需要確保所有其他字段都是可序列化的,但這應該是一個開始。

+0

它不是'因爲比較器是不可序列化的,但即使我聲明它是暫時的,它仍然會因爲使用比較器的TreeMap而拋出。 – d0pe

+0

然後答案肯定是使比較器序列化。 –

0

TreeMap在這裏沒有做任何特別的事情。如果序列化的TreeMap和不是你的比較器的TreeMap唯一的區別...那麼你的比較器是不可序列化的。

你是如何執行比較器的?對於沒有臨時引用的TreeMap類,您的臨時聲明是毫無意義的。

這個例外是什麼意思?