以前写了一个用于排序的类private static class TypeNodeComparator implements Comparator{
    // TODO
}一直都工作正常今天心血来潮,用FindBugs检查了一下,报告说有错,意思是说我没有实现Serializable接口改为:private static class TypeNodeComparator implements Comparator, Serializable {
    // TODO
}后,再用FindBugs检查通过.在API中这样描述的:
注:通常来说,让 Comparator 也实现 java.io.Serializable 是一个好主意,因为它们在可序列化的数据结构(像 TreeSet、TreeMap)中可用作排序方法。为了成功地序列化数据结构,Comparator(如果已提供)必须实现 Serializable。我想请问一下,实现Serializable接口的目的是什么?如果不实现该接口的话会不会造成什么影响?
请知道的解释一下,最好能有例子演示一下 SUN 标称的"好主意".

解决方案 »

  1.   

    Serializable只是一个空的标记接口,一般要将对象进行序列化时需要实现这个接口,
    比如,需要在网络中传输这个对象、要将这个对象写到文件里去什么的。如果不将对象序列化时,没有任何区别。最常见的就是使用ObjectOutputStream将对象序列化到文件中保存起来,便于今后再次使用,
    这时这个类就必须实现Serializable接口,否则会被认为是不能序列化的,在其内部使用了
    instanceof Serializable来进行检查。
      

  2.   

    java.io.Serializable的API DOC有详细的说明。
      

  3.   

    java.io.Serializable的API   DOC有详细的说明。
      

  4.   

    上面已经说过了,要序列化,只须实现Serilizable借口了。。具体还是参看<Effective Java>