![](/img/trans.png)
[英]How to use getOrElseUpdate in scala.collection.mutable.HashMap?
[英]How can I specify a SerialVersionUID for a scala.collection.mutable.Hashmap?
我有一個帶有通過java.io序列化的保存的游戲。 保存為Hashmap[String, Any]
。 Any
包含的類均具有SerialVersionUID(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.