我想在我的应用程序中更改多个类的包。 一个不错的eclipse redactor很好,但我的一些类是Serializables,我需要支持跨版本兼容性。
关于如何做到的任何想法? 可以自动/半自动完成吗?
答案 0 :(得分:3)
如果类结构保持不变,则可以继承自定义ObjectInputStream,在其构造函数中调用enableResolveObject(true)
,然后使用以下内容覆盖readClassDescriptor()
:
protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {
ObjectStreamClass read = super.readClassDescriptor();
if (read.getName().startsWith("com.old.package.")) {
return ObjectStreamClass.lookup(Class.forName(read.getName().replace("com.old.package.", "org.new.package.")));
}
return read;
}
答案 1 :(得分:0)
如果不破坏与序列化的兼容性,您根本无法更改类名称或包装。
您必须找到一种方法将您的课程保持在同一个包中,否则您必须打破复古兼容性。
如果您仍然对应用程序的先前版本进行更新,则可以创建强制更新,这将更改序列化数据的方式,并且不使用默认的Java序列化。
关于同一主题: