我正在尝试序列化一个对象,然后在将其数据发送到客户端程序后反序列化它。
下面是一个对象继承工作原理的示例。我正在序列化和反序列化的对象是person。
生活->动物->npc->人->孩子
living、animal和npc不实现序列化。我不能改变这三门课。person和child不实现序列化。人和生活也是抽象的类。我可以序列化一个人(他是一个孩子)并发送它,但是当我试图反序列化一个人(他是一个孩子)时,我在child上得到一个invalidclassexception,说“没有有效的构造函数”。
为什么会这样?生活、动物和npc都必须实现序列化吗?
3条答案
按热度按时间jk9hmnmh1#
我在hazelcast的序列化中也遇到了同样的问题,但是通过使用自定义序列化,在不借助中间类的情况下解决了这个问题。我向animal类添加了一个空的no arg构造函数,并实现了person类,如下所示:
pxiryf3j2#
下面的问题对反序列化arraylist做了很好的解释。没有有效的构造函数
长话短说-对于类的第一个不可序列化的超类,不需要arg构造函数,
NPC
对你来说。如果您没有访问npc的权限,并且它不包含arg构造函数,那么您可以向层次结构中添加一个“fake”类,该类将选择正确的类。例如
u3r8eeie3#
对于这个线程,它们不需要实现serializable,但是它们(或者至少是npc,因为它是继承结构中第一个不可序列化的类)必须包含一个0参数构造函数。如果类中没有定义构造函数,则隐式构造函数是adaquate,但是如果在这些类中定义了其他构造函数,则必须编写显式0参数构造函数。
由于无法控制npc,请尝试创建它的子级,该子级定义显式的0-param构造函数,但不实现serializable,然后查看是否这样做。