【发布时间】:2018-03-18 10:53:18
【问题描述】:
//Singleton
public class MainList implements Serializable {
private static MainList instance = new MainList();
private MainList() {}
public static MainList getInstance() {
return instance;
}
}
//Trying to deserialize..
public MainWindow() {
//Importing the latest version if it exists in path
MainList mainListObj = MainList.getInstance();
try {
FileInputStream fis = new FileInputStream(path);
ObjectInputStream oin = new ObjectInputStream(fis);
mainListObj = (MainList) oin.readObject(); //HERE//////
}
catch (Exception exc) {
return;
}
}
MainList类的Singleton-Object被序列化&可以通过路径找到。
就行 //HERE/// 对象成功反序列化为mainListObj, 但它是本地的..
我怎样才能让它全球化?我认为这可以通过改变 getInstance 方法来解决..不知何故..
【问题讨论】:
-
将您在 HERE 获得的值设置为 MainList 的 INSTANCE ?
-
如果您可以反序列化和替换实例,那么它不是单例。因此答案是“你不能反序列化一个单例”。
-
你说得对,但是
-
我不想替换它,我想创建一个新的(第一个),使用我反序列化的 obj..
-
在解决这个问题之前,您需要了解“Java 通过值传递引用”是什么意思。您在代码中所做的所有操作都被重新分配了一个引用。另外:您可能想研究如何关闭外部资源。
标签: java serialization singleton deserialization singleton-methods