从类函数反序列化java对象

时间:2017-03-28 15:22:20

标签: java serialization deserialization

假设我有以下Java类:

public class ImaginaryClass implements Serializable {
    private List<SomeData> someData;
    private transient boolean isSynced;

    public ImaginaryClass() {
        this.load();
    }

    public void addSomeData(SomeData data) {
        this.someData.add(data);
        this.isSynced = false;
        this.save();
    }

    private void load() {
        // Deserialize "this" instance of the object
        this.isSynced = true;
    }

    private void save() {
        // Serialize "this" instance of the object
        this.isSynced = true;
    }
}

我的目标是在对象自己的类中封装对象实例的序列化和反序列化。我有许多课程要实施,需要特殊的&#34;治疗&#34;因此,这是我迄今为止提出的最简单的设计。

但是,我遇到了问题,我无法重新分配参考this,所以我认为这不会起作用。在Java中我的上述例子可能吗?我如何使这项工作?

1 个答案:

答案 0 :(得分:1)

您无法重新分配this,您在Serializable对象中执行的操作是序列化/反序列化所有非瞬态非静态字段。

您创建对象的新实例的想法并不错。

如果您创建一个全新的对象,则应将其作为新引用返回,在这种情况下,您可以使用 factory 通过从某些持久存储中加载来构建对象,例如:< / p>

ImaginaryClass objImg = ImaginaryClassFactory.newInstace().loadImaginaryClass();

或者您可以在类本身的public static方法中执行此操作:

public class ImaginaryClass implements Serializable {
  public static ImaginaryClass load(){
     ....
  }
}