Java无法序列化对象的字段

时间:2016-01-27 14:21:51

标签: java serialization

我试图了解序列化并遇到以下问题:

我有一个看起来像这样的客户实现。

private static customerCount = 0;
private String customerID;
private String name;
private String street;
private String city;
private String postcode;
private String type;

我试图序列化/反序列化Arraylist

在构造函数中,ID将按如下方式创建:

private Customer(...){
this.customerID = "ID" + customerCount;
customerCount++;
}

序列化过程有效,但是,在反序列化时,所有ID都设置为ID0。 任何人都可以帮助解决这个问题吗?

更新:好的,我刚发现静态字段不会被序列化。我怎样才能"模型"客户的ID,所以我可以序列化它?我需要有一个独特的价值来为客户创建ID。

2 个答案:

答案 0 :(得分:1)

这是一个将工厂与跟踪客户数量的列表相结合的解决方案。

customer类有一个受保护的构造函数,强制您通过同一个包中的其他方法构建它们。

5

现在在包中,创建一个这样的列表包装器:

public class Customer implements Serializable {
    private String customerID;
    private String name;
    private String street;
    private String city;
    private String postcode;
    private String type;

    protected Customer(String customerID,
                    String name,
                    String street,
                    String city,
                    String postcode,
                    String type) {
        this.customerID = customerID;
        this.name = name;
        this.street = street;
        this.city = city;
        this.postcode = postcode;
        this.type = type;
    }
}

然后,该课程负责构建新客户,并提供唯一的ID。

编辑:刚刚注意到你现在也有使CustomerList类可序列化的好处。然后,您可以加载它,并且仍然具有准确的客户数量,以便添加其他唯一ID ID客户。

答案 1 :(得分:0)

通常,您只想序列化属性及其值,而不是序列化类中的逻辑。逻辑应该在序列化之前或反序列化之后发生。