sus*_*att 3 java inheritance serialization
我是序列化的新手,所以这可能是一个简单的问题,但我的google-fu今天很弱.
假设您有以下类:
public class Base implements Serializable {
// ...
}
public class Der1 extends Base {
// ...
}
public class Der2 extends Base {
// ...
}
Run Code Online (Sandbox Code Playgroud)
Alice随机创建一个Der1或两个对象Der2,将其序列化为文件,然后将其发送给Bob.Bob知道这个对象的类是子类Base,但不知道哪一个(他有与Alice有相同的类定义).Bob如何将文件反序列化为适当子类的实例?
我的第一个想法是Alice可以定义一个这样的类:
public DerClass implements Serializable {
public Class<? extends Base> class;
}
Run Code Online (Sandbox Code Playgroud)
她使用它来存储对象的类,将其序列化并将其发送给Bob.Bob DerClass从该文件构造一个对象,读取class变量,使用它来实例化正确的子类,并将序列化对象读入其中.这会有用吗?有没有更好的办法?
反序列化应用程序不需要知道类型,它只需要在类路径中具有相同的类.例如,Alice需要拥有Bob可能发送的所有课程以及他们的父母和家属.
// Bob sends
Base base = // some Base class
objectOutputStream.writeObjec(base);
// Alice receives
Base base = (Base) objectInputStream.readObject();
Run Code Online (Sandbox Code Playgroud)