2013-02-06 77 views
-3

爲什麼我得到這個錯誤?序列化:InvalidClassException scala

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

使用的IntelliJ

+4

多一點上下文不會傷害。 –

回答

2

讓我猜:你的序列化(通過Java的內置序列化),它包含一個ClassManifest(從誰ClassTypeManifest是一個亞型)到一個文件(或數據庫),然後一類升級了你的Scala版本,現在正試圖反序列化該文件,對吧? 或者您正在將一個序列化對象從一個JVM進程發送到另一個JVM進程,並且它們運行不同版本的scala。

嗯,不要這樣做。 第一個原因是ClassTypeManifest聲明沒有明確的serialVersionUID字段(請參見What is a serialVersionUID and why should I use it?),這清楚地表明對類的任何更改都可能會更改序列化格式。您無法真正期望在ClassTypeManifest的分離流中有任何向後兼容性。 此外,在斯卡拉2.10 ClassManifest甚至不再是一個類:它僅僅是ClassTag的一個別名,這是一個明顯不同的類。

真的,不要指望能夠序列化(使用java的序列化)一個ClassManifest並用另一個版本的scala讀回它。

如果您真的需要使用java反射,您可以嘗試用java.lang.Class字段替換您的ClassManifest字段(這對於序列化/反序列化總是安全的)。

否則,你可以看看使用其他序列化庫。

+0

爲什麼SO有學者,學生等獎牌但沒有心理獎章? –

0

我解決了這個問題。解決方案是使用Maven生命週期清理,然後安裝。