为什么我收到此错误?
Serialization Problem
java.io.InvalidClassException: scala.reflect.ClassTypeManifest;
local class incompatible: stream classdesc serialVersionUID =
使用intellij
答案 0 :(得分:2)
让我猜一下:你序列化了(通过java的内置序列化)一个包含ClassManifest
(从谁ClassTypeManifest
是子类型)到文件(或数据库)的类,然后升级了你的scala版本,现在正在尝试反序列化该文件,对吧?
或者您正在从一个JVM进程向另一个JVM进程发送序列化对象,并且它们运行不同版本的scala。
好吧,不要这样做。
第一个原因是ClassTypeManifest
没有声明明确的serialVersionUID
字段(请参阅What is a serialVersionUID and why should I use it?),这清楚地表明对类的任何更改都可能会更改序列化格式。你真的不能期望在ClassTypeManifest
的被清除的流中有任何向后兼容性。
另外,在scala中,2.10 ClassManifest
甚至不再是一个类:它只是ClassTag
的一个别名,它是一个显着不同的类。
实际上,不要期望能够序列化(使用java的序列化)ClassManifest
并使用另一个版本的scala读回来。
如果您确实需要使用java反射,则可以尝试将ClassManifest
字段替换为java.lang.Class
字段(始终可以安全地序列化/反序列化)。
否则,您可以考虑使用其他序列化库。
答案 1 :(得分:0)
我解决了这个问题。解决方案是使用Maven生命周期清理,然后安装。