我有一个序列化java地图Map<UUID,String>
的方法。它工作正常。我可以在java中序列化和反序列化。
但我必须从scala调用此方法,这是我的调用代码。
def customSerialize:Unit = {
Serializer.serialize(modMap(scalaMap))
def modMap(oldMap : Map[UUID,SomeObject]) : java.util.Map[UUID,java.lang.String] = {
oldMap map { case(k,v) => (k->v.name)}
}
scala地图为scala.collection.Map
,我正在使用import scala.collection.JavaConversions._
进行转化。
当我运行此代码时,我收到错误
java.io.NotSerializableException: scala.collection.JavaConversions$MapWrapper
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
看起来我需要再从javaconversions$MapWrapper
转换为java.util.Map
。它是否正确?有没有办法做到这一点?
答案 0 :(得分:1)
就个人而言,我打开一个增强问题,要求这些包装器可序列化。并不是说它会在短期内帮助你,但是......
您是否尝试了JavaConverters
中的内容?
答案 1 :(得分:1)
据我所知,您需要复制地图,因为MapWrapper不可序列化。最好是Scala支持这一点,但与此同时,合理的语法只是使用Java Map的复制构造函数。您的电话将如下所示:
Serializer.serialize(new java.util.HashMap(modMap(scalaMap)))