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

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变量,使用它来实例化正确的子类,并将序列化对象读入其中.这会有用吗?有没有更好的办法?

Pet*_*rey 5

反序列化应用程序不需要知道类型,它只需要在类路径中具有相同的类.例如,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)

  • @JonasGröger她可以做`if (base instanceof Der1) { Der1 der1 = (Der1) base; /* 某事 */ } else if (base instanceof Der2) ...` (2认同)