在Effective Java第二版中,作为使用默认序列化表单的一个不好的例子,给出了这个类:
// Awful candidate for default serialized form
public final class StringList implements Serializable {
private int size = 0;
private Entry head = null;
private static class Entry implements Serializable {
String data;
Entry next;
Entry previous;
}
... // Remainder omitted
}
给出的原因是"默认的序列化表单将精心镜像链表中的每个条目 以及两个方向上条目之间的所有链接。"然后它继续说我们应该将这个类序列化为一个字符串数组。
在Java EE 6教程中是另一个例子 - the order application。在其中,还有一个类Part
,它也使用默认的序列化形式,如下所示:
public class Part implements java.io.Serializable {
private static final long serialVersionUID = -3082087016342644227L;
private Date revisionDate;
private List<Part> parts;
private Part bomPart;
private Serializable drawing;
private String description;
private String partNumber;
private String specification;
private VendorPart vendorPart;
private int revision;
...
}
由于Part
包含List
个Part
,我们是否有同样的问题?默认的序列化表单将递归序列化包含在另一个Part
对象中的每个Part
对象。