尝试序列化来自scala的java map转换时不可序列化的异常

时间:2011-07-21 17:32:26

标签: java scala

我有一个序列化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。它是否正确?有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

就个人而言,我打开一个增强问题,要求这些包装器可序列化。并不是说它会在短期内帮助你,但是......

您是否尝试了JavaConverters中的内容?

答案 1 :(得分:1)

据我所知,您需要复制地图,因为MapWrapper不可序列化。最好是Scala支持这一点,但与此同时,合理的语法只是使用Java Map的复制构造函数。您的电话将如下所示:

Serializer.serialize(new java.util.HashMap(modMap(scalaMap)))