尝试序列化从scala转换的java映射时出现不可序列化的异常 [英] notserializable exception when trying to serialize java map converted from scala

查看:217
本文介绍了尝试序列化从scala转换的java映射时出现不可序列化的异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个序列化java地图的方法 Map< UUID,String> 。它工作正常。我可以在java中序列化和反序列化。

I have a method to serialize a java map Map<UUID,String>. It works fine. I can serialize and deserialize in java.

但是我必须从scala调用这个方法,这是我的调用代码。

But I have to call this method from scala and this is my calling code.

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 ._ 进行转换。

The scala map is scala.collection.Map and I am using import scala.collection.JavaConversions._ for doing the conversion.

当我运行此代码时,我收到错误

When I run this code I get the error

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

It looks like I need one more conversion from javaconversions$MapWrapper to java.util.Map. Is this correct? Is there a way to do this?

推荐答案

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

As far as I can tell, you do need to copy the map because the MapWrapper is not serializable. Best would be for Scala to support this, but in the meantime a reasonable syntax is just to use the copy constructor for a java Map. Your call would then look like this:

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

这篇关于尝试序列化从scala转换的java映射时出现不可序列化的异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆