我序列化了一个 ArrayList<packageA.Changelog> list
到一个文件并将该文件传输到另一台机器上的另一个系统。
而且因为接收文件的是不同的系统,所以我没有相同的 packageA.Changelog
类,而是一个 packageB.Changelog
它具有完全相同的结构,但在不同的包中。
当我使用
ArrayList<packageB.Changelog> changelogs = (ArrayList<packageB.Changelog>)ois.readObject();
从文件中读出一个 ClassCastException
.
如何避免这个异常?我是否只需要在另一个系统中创建相同的包结构来接收列表?
最佳答案
是的,您可以做三件事之一。
用相同的包名创建相同的类
创建一个接口(interface)(当然在两台机器上的同一个包中)并将其发送到客户端机器上。即使在不同的包中,您的所有类都可以实现此接口(interface)。例如,您的接口(interface)可以命名为 Loggable,并且它应该声明现在 ChangeLog 类中的所有方法。
或者最后不使用“ChangeLog”类,而是完全避免使用它,而是使用默认情况下可序列化的 HashMap。而且您不必将任何东西运送到您的客户端(其他)机器。您将能够序列化 ArrayList 并将其转换回其他机器上的对象。
所有实现类 Loggable 的类都可以转换为该类型。 希望对您有所帮助
关于java - 如何从文件反序列化到不同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6994054/