gpt4 book ai didi

java - Protostuff 运行时模式和多态性问题

转载 作者:行者123 更新时间:2023-12-02 10:17:44 27 4
gpt4 key购买 nike

我有一个 Java 类层次结构,我想使用 protostuff 对其进行序列化和反序列化。

这些类如下(只是一个玩具示例)

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

如何在序列化/反序列化过程中保留多态性信息?

希望有人能帮助我

最佳答案

关于java - Protostuff 运行时模式和多态性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54555371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com