反序列化已知超类的随机派生类

时间:2011-07-08 12:35:33

标签: java serialization inheritance

我是序列化的新手,所以这可能是一个简单的问题,但我的google-fu今天很弱。

假设您有以下类:

public class Base implements Serializable {
    // ...
}

public class Der1 extends Base {
    // ...
}

public class Der2 extends Base {
    // ...
}

Alice随机创建Der1Der2的对象,将其序列化为文件,然后将其发送给Bob。 Bob知道这个对象的类是Base的子类,但不知道哪一个(他有与Alice有相同的类定义)。 Bob如何将文件反序列化为适当子类的实例?

我的第一个想法是,Alice可以定义一个这样的类:

public DerClass implements Serializable {
    public Class<? extends Base> class;
}

她使用它来存储对象的类,将其序列化并将其发送给Bob。 Bob从此文件构造DerClass对象,读取class变量,使用它来实例化正确的子类,并将序列化对象读入其中。这会有用吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:5)

反序列化应用程序不需要知道类型,它只需要在类路径中具有相同的类。例如Alice需要拥有Bob可能发送的所有课程以及他们的父母和家属。

// Bob sends
Base base = // some Base class
objectOutputStream.writeObjec(base);

// Alice receives
Base base = (Base) objectInputStream.readObject();