簡體   English   中英

序列化問題:相互依賴的對象和ArrayLists

[英]Serialization problems: objects that depend on each other and ArrayLists

我必須序列化一個項目,這是我第一次使用序列化。 在了解了這一點之后,我想到了兩個可能的問題:我的類有一個屬性,該類型是另一個不同的類,有一個屬性是第一個類(解釋不佳,但可以在代碼中看到),以及我使用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);
}
}

還有一個main方法,該方法創建幾個組和人員,並使用writeObject()將其寫入文件,以及另一個main方法,該方法使用readObject()來取回對象(它僅使用readObject()並打印它們)。

由於上述原因,我沒想到它能起作用,但是它能很好地工作,所以我嘗試序列化我的主項目(更加復雜),但是卻沒用(巨大的堆棧跟蹤,只是說“ User”),是等價於人,不可序列化)。

是否有任何原因或我應該考慮的重大缺陷?

對於沒有包括我使用的兩個主要方法,以及沒有任何堆棧跟蹤或主要項目,我深表歉意,但是我不想讓這個問題過長。

我的類具有屬性是另一種類型的屬性,另一個類具有屬性是第一類的屬性(解釋不佳,但可以在代碼中看到)

難以理解。 如果您正在談論的話,Java和序列化都可以處理循環依賴關系。

和我使用ArrayLists的事實(我讀過的不能序列化)

錯誤。

簡單地說“用戶”(等同於人)不可序列化

因此, User未實現Serializable.

是否有任何原因或我應該考慮的重大缺陷?

使User實現可Serializable. 對於任何給您相同消息的其他類,均相同。

您需要閱讀對象序列化規范和相關的Javadoc,並停止依賴於任意Internet垃圾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM