2009-12-06 67 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类,您的临时声明是毫无意义的。

这个例外是什么意思?