我有一个Java类的层次结构,我想使用原型来序列化和反序列化。
以下是这些类(只是一个玩具示例)
class Wrapper {
public List<Being> beings;
}
class Being {
public Animal animal;
}
class Animal {
public String sex;
public int legs;
}
class Antelope extends Animal {
public int speed;
public String furType;
}
class Spider extends Animal {
public int numberOfEyes;
public int size;
}
我正在使用以下代码通过如下所示的运行时模式生成来序列化和反序列化对象
public static void main(String[] args) {
LinkedBuffer buffer = LinkedBuffer.allocate(1024 * 1024);
Being b1 = new Being();
Antelope a1 = new Antelope();
a1.legs = 4;
a1.furType = "Fuzzy";
a1.sex = "M";
a1.speed = 70;
b1.animal = a1;
Being b2 = new Being();
Spider s1 = new Spider();
s1.legs = 4;
s1.sex = "M";
s1.numberOfEyes = 8;
s1.size = 2;
b2.animal = s1;
Wrapper w = new Wrapper();
w.beings = new ArrayList<>();
w.beings.add(b1);
w.beings.add(b2);
// Serialize
Schema<Wrapper> schema = RuntimeSchema.getSchema(Wrapper.class);
byte[] data = ProtostuffIOUtil.toByteArray(w, schema, buffer);
// Deserialize
Wrapper w1 = schema.newMessage();
ProtostuffIOUtil.mergeFrom(data, w1, schema);
System.out.println(w1.beings.get(0).animal.getClass());
System.out.println(w1.beings.get(1).animal.getClass());
}
问题在于此代码的输出为
class Animal
class Animal
代替
class Antelope
class Spider
在序列化/反序列化期间如何保存多态信息?
我希望有人能帮助我
答案 0 :(得分:1)