-3

为什么我会收到此错误?

Serialization Problem 
  java.io.InvalidClassException: scala.reflect.ClassTypeManifest; 
  local class incompatible: stream classdesc serialVersionUID =

使用智能

4

2 回答 2

2

让我猜猜:你序列化(通过java的内置序列化)一个包含一个ClassManifest(来自谁ClassTypeManifest的子类型)到一个文件(或数据库)的类,然后升级你的scala版本,现在正试图反序列化那个文件,对吧? 或者你正在将一个序列化的对象从一个 JVM 进程发送到另一个进程,并且它们运行不同版本的 scala。

好吧,不要这样做。第一个原因是ClassTypeManifest没有声明显式serialVersionUID字段(请参阅什么是 serialVersionUID 以及为什么要使用它?),这清楚地表明对类的任何更改都可能会更改序列化格式。您不能真正期望在ClassTypeManifest的序列化流中有任何向后兼容性。此外,在 scala 2.10ClassManifest中甚至不再是一个类:它只是一个别名,ClassTag 它是一个明显不同的类。

所以真的,不要指望能够序列化(使用java的序列化)aClassManifest并用另一个版本的scala读回它。

如果你真的需要使用 java 反射,你可以尝试用字段替换你ClassManifestjava.lang.Class字段(序列化/反序列化总是安全的)。

否则,您可以考虑使用其他序列化库。

于 2013-02-06T13:14:11.060 回答
0

我解决了这个问题。解决方案是使用 Maven 生命周期清理,然后安装。

于 2013-05-06T15:27:27.930 回答