簡體   English   中英

如何為scala.collection.mutable.Hashmap指定SerialVersionUID?

[英]How can I specify a SerialVersionUID for a scala.collection.mutable.Hashmap?

我有一個帶有通過java.io序列化的保存的游戲。 保存為Hashmap[String, Any] Any包含的類均具有Seri​​alVersionUID(1L)。 我在此配置中使用sbt https://github.com/ajhager/libgdx-sbt-project.g8

當我使用desktop/run啟動desktop/run項目時,它可以正常desktop/run ,但是由assembly生成的jar拋出此錯誤:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.io.InvalidClassException: scala.collection.mutable.HashMap; local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = -1796852918056492754
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
Caused by: java.io.InvalidClassException: scala.collection.mutable.HashMap; local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = -1796852918056492754
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:617)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
    at ntn.castersrun.IntoFileSaver$.getSave(IntoFileSaver.scala:34)
    at ntn.castersrun.IntoFileSaver$.load(IntoFileSaver.scala:24)

我可能應該另存為元組數組,但是我不知道是什么原因導致此錯誤,或者如何解決該錯誤。

我仍然不知道如何設置Scala元組的SerialVersionUID,或者為什么Scala Hashmap不像元組那樣具有UID 1。

但是,我通過告訴ProGuard不要混淆任何 Serializable來使assembly產生可接受的輸出。 僅Tuple2s和我自己的Serializable類就足夠了,但是我不想學習有關ProGuard -keep語法的全部知識。

http://proguard.sourceforge.net/manual/examples.html#serializable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM