Wil*_*Boy 15 java serialization deserialization
我正在尝试序列化一个对象,然后在将其数据发送到客户端程序后反序列化它.
这是对象继承如何工作的一个例子.我正在序列化和反序列化的对象是人.
生活 - >动物 - > NPC - >人 - >儿童
Living,Animal和NPC不实现Serializable.我无法改变这三个班级.Person和Child确实实现了Serializable.人与生活也是抽象的阶级.我可以将一个Person(谁是一个Child)序列化并发送它,但是当我尝试反序列化一个Person(谁是一个Child)时,我在Child上得到一个InvalidClassException,说"没有有效的构造函数".
为什么会这样?Must Living,Animal和NPC都实现Serializable?
uda*_*mik 13
在下面的问题的答案中做了很好的解释 反序列化ArrayList.没有有效的构造函数
长话短说 - NPC在你的情况下,你需要no-arg构造函数用于你的类的第一个非可序列化的超类.
如果您无权访问NPC并且它不包含no-arg构造函数 - 那么您可以在层次结构中添加一个"假"类,这将选择正确的类.例如
class SomeClass extends NPC {
// will be called during deserialization
public SomeClass(){
// call custom constructor of NPC
super(null);
}
}
class Person extends SomeClass implements Serializable {
// ..
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13593 次 |
| 最近记录: |