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
的源代码的情况下序列化a
B
并将其反序列化为
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
}