序列化问题:相互依赖的对象和ArrayLists

Serialization problems: objects that depend on each other and ArrayLists

我要连载一个项目,第一次使用连载。得知此事后,我想到了两个可能的问题:我的 classes 有属性,哪种类型是另一种不同的 class 有属性,哪种类型是第一种 class (解释得不好,但是可以在代码中看到)和我使用 ArrayLists 的事实(我读过的不能序列化)。所以我决定尝试一个非常简化的项目版本:

一个组,它包含一个 ArrayList of Person:

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 of Groups:

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);
}
}

还有一个 main 方法,它创建了一些组和人并使用 writeObject() 将它们写入文件,加上另一个 main 方法使用 readObject() 取回对象(它只使用 readObject() 并打印他们)。

由于上述原因,我没想到它会起作用,但它运行得很好,所以我尝试序列化我的主要项目(方式更复杂)但它不起作用(巨大的堆栈跟踪,简单地说"User",相当于person,不可序列化)。

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

很抱歉没有包括我使用的两个主要方法,以及堆栈跟踪或主项目的none,但我不想把这个问题弄得太长。

my classes have atributes which type is another different class that has atributes which type is the first class (explained poorly, but can see in the code)

无法理解。 Java 和序列化都处理循环依赖,如果这就是你所说的。

and the fact that I use ArrayLists (which I've read can't be serialized)

错了。

simply saying "User", which is the equivalent to person, is not serializable

所以User没有实现Serializable.

Is there any reason for this or any major flaw that I should take into account?

使 User 实现 Serializable. 对任何其他 class 提供相同消息的人来说也是如此。

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