我试图了解序列化并遇到以下问题:
我有一个看起来像这样的客户实现。
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。
答案 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)
通常,您只想序列化属性及其值,而不是序列化类中的逻辑。逻辑应该在序列化之前或反序列化之后发生。