我将一个序列化为一个ArrayList<packageA.Changelog> list文件,并将该文件传输到另一台计算机上的另一个系统。
ArrayList<packageA.Changelog> list
而且由于接收文件的系统是不同的,所以我没有相同的packageA.Changelog类,而是packageB.Changelog具有完全相同的结构但使用不同的包的类。
packageA.Changelog
packageB.Changelog
当我使用
ArrayList<packageB.Changelog> changelogs = (ArrayList<packageB.Changelog>)ois.readObject();
从文件中读出我有一个ClassCastException。
ClassCastException
如何避免这种异常?是否仅在接收列表时需要在其他系统中创建相同的包结构?
是的,您可以做三件事之一。
用相同的包名称创建相同的类
创建一个接口(当然,在两台计算机上都使用相同的包),然后将其发送到客户端计算机上。您所有的类都可以在不同的程序包中实现此接口。例如,您的接口可以命名为Loggable,它应该具有声明的所有方法,这些方法现在都在ChangeLog类中。
或者最后,不要完全使用类“ ChangeLog”,而要完全避免使用它,而应使用默认情况下可序列化的HashMap。而且您不必将任何物品运送到您的客户端(其他)机器。您将能够序列化ArrayList并将其转换回另一台计算机上的对象。
然后,实现类Loggable的所有类都可以转换为该类型。我希望这有帮助