序列化问题:彼此依赖的对象和ArrayLists

时间:2015-03-24 09:19:14

标签: java serialization arraylist

我必须序列化一个项目,这是我第一次使用序列化。在得到消息后,我想到了两个可能的问题:我的类有一个属性,哪个类型是另一个不同的类,它具有属性类型是第一个类(解释不好,但可以在代码中看到)以及我使用ArrayLists的事实(我读过的不能序列化)。所以我决定试用一个非常简化的项目版本:

一个组,它包含Person的ArrayList:

public class Group implements Serializable {

private static final long serialVersionUID = 1L;
private Person leader;
private List<Person> members;
private int number;

public Group(Person leader, int number) {
    this.leader = leader;
    this.number = number;
    this.members = new ArrayList<Person>();
    this.members.add(leader);
}

public void addMember(Person p) {
    this.members.add(p);
}

public int getNumber() {
    return number;
}
}

一个人,它包含一个群组的ArrayList:

public class Person implements Serializable {

private static final long serialVersionUID = 1L;
private List<Group> groups;
private String name;

public Person(String name) {
    this.name = name;
    this.groups = new ArrayList<Group>();
}

public Group createGroup(int number) {
    Group g = new Group(this, number);
    this.groups.add(g);
    return g;
}

public void joinGroup(Group g) {
    this.groups.add(g);
    g.addMember(this);
}
}

一个创建一些组和人的主要方法,并使用writeObject()将它们写入文件,再加上另一个使用readObject()来获取对象的main(它只使用readObject()并打印它们) 。

由于上面提到的原因,我没想到它会工作,但它工作得很好,所以我尝试序列化我的主项目(方式更复杂)但它没有工作(巨大的堆栈跟踪,简单地说&#34; User&#34;,这相当于人,不可序列化)。

我应该考虑这个或任何重大缺陷的原因吗?

我为不使用我使用的两种主要方法以及堆栈跟踪或主项目都没有道歉,但我并不想让这个问题变得非常长。

1 个答案:

答案 0 :(得分:0)

  

我的类有一个属性,哪个类型是另一个不同的类,它具有一个类型是第一个类的属性(解释很差,但可以在代码中看到)

不可理解。 Java和Serialization都处理循环依赖,如果这是你正在谈论的内容。

  

以及我使用ArrayLists(我已经阅读过但无法序列化)的事实

错误。

  

简单地说&#34; User&#34;,这相当于人,不可序列化

所以User没有实现Serializable.

  

我应该考虑这个或任何重大缺陷的原因吗?

使User实现Serializable.对于为您提供相同消息的任何其他类都相同。

您需要阅读Object Serialization Specification和相关的Javadoc,并停止依赖任意互联网垃圾。