我正在开发一个项目,我需要缓存一些类,这些类需要这些类实现可序列化。我收到的错误类似于“classcastException:类 demo.x.t.y.A(我序列化的任何类)无法转换为类 demo.x.t.y.A”。我的意思是类(class)彼此完全相同。
经过深度尝试,当我使用java自己的实现可序列化的类而不是我的可序列化类时,我发现程序可以工作。我使用 netbeans 网站中建议的插件在 netbeans 中生成了 uuid。我很确定原因是我自己生成的 uuid,但为什么 uuid 不起作用?生成 uuid 后我不会对类进行任何更改。
在serialversionUUID之上的java默认类中,有一个与此完全相同的注释“/**使用JDK 1.0.2中的serialVersionUID来实现互操作性*/”。这是否意味着我应该使用jdk1.0.2生成uuid?我尝试了很多事情并对任何解决方案持开放态度。感谢您的回复。
为了帮助可能遇到相同问题的开发人员,我有一个我不想使用的解决方案。您可以单独缓存每个变量,而不是缓存整个类。
由于这是我的第一个问题,对于我在编写问题时犯的任何错误表示歉意。
编辑: 我正在使用servlet。当我运行 servlet 时,它工作正常,但在另一次部署后它失败。
最佳答案
该问题可能不是由串行版本 UID 引起的,而是由类加载器问题引起的。您可能尝试将一个类由类加载器 A(EHCache 使用的类加载器)加载的类的对象强制转换为由类加载器 B(您的 Web 应用程序的类加载器)加载的类。
如果没有更多细节,很难说出您应该做什么,但请确保您的类可以由且仅一个类加载器加载。例如,如果该类同时位于 Web 应用程序的类路径 (WEB-INF/lib) 和服务器类路径中,则可能是问题所在。
关于Java可序列化类生成的uuid不适用于ehcache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12293390/