我是序列化的新手,所以这可能是一个简单的问题,但是我的google-fu今天很弱。反序列化已知超类的随机派生类
假设有以下类:
public class Base implements Serializable {
// ...
}
public class Der1 extends Base {
// ...
}
public class Der2 extends Base {
// ...
}
爱丽丝随机创建任一Der1
或Der2
的目的,将其序列到一个文件,并把它发送给Bob。 Bob知道这个对象的类是Base
的一个子类,但不知道哪一个(他具有与Alice相同的类定义)。 Bob如何反序列化文件以成为适当子类的实例?
我首先想到的是,爱丽丝可以定义一个类是这样的:
public DerClass implements Serializable {
public Class<? extends Base> class;
}
她用它来存储对象的类,其序列,并将其发送给Bob。 Bob从这个文件构造一个DerClass
对象,读取class
变量,用它来实例化正确的子类,并将序列化对象读入它。这会工作吗?有没有更好的办法?
我总是怀疑人们是从这些“随机班级”中获得的。这里的实际情况是什么?您的序列化格式必须包含一些信息,以便在任何情况下进行标识。 –
@suszterpatt:我想如果你在这里为Bob写代码,你的问题会更友好。 –