Java 仅序列化超类
我有以下课程:Java 仅序列化超类,java,inheritance,serialization,Java,Inheritance,Serialization,我有以下课程: class A implements Serializable { String field1; String field2; // a lot more fields here... } class B extends A { int someOtherField; } 其中,B是我的类,A在我不拥有的包中。在我的环境中,类B的对象被序列化,稍后将在不同的环境中反序列化,其中只有类a在类路径中,而不是类B,因此将发生错误,找不到该类B 为了解决这个问题,我可
class A implements Serializable {
String field1;
String field2;
// a lot more fields here...
}
class B extends A {
int someOtherField;
}
其中,B
是我的类,A
在我不拥有的包中。在我的环境中,类B
的对象被序列化,稍后将在不同的环境中反序列化,其中只有类a
在类路径中,而不是类B
,因此将发生错误,找不到该类B
为了解决这个问题,我可以向a
添加一个复制构造函数,如下所示,而不是序列化对象b
,而是序列化新的a(b)
:
我现在的问题是,我只能更改B
,而不能更改A
。
那么,有没有什么方法可以在不访问
a
的源代码的情况下序列化aB
并将其反序列化为a
?为什么需要更改a
来创建“复制构造函数”?只需在B
中添加一个A toA()
方法。。。我不知道我自己怎么没有想到这个。。。我问这个问题感到很尴尬。但是谢谢你的帮助。@AndyTurner使用B构造的对象不会在第二个系统上仍然抛出一个ClassNotFoundException
,因为序列化定义包含B吗?@RajeevSreedharan如果你在该方法中创建一个新的a
。。。不
A(A other) {
this.field1 = other.field1;
this.field1 = other.field1;
// and so on
}