在Scala中序列化匿名函数包装不能序列化的类型

时间:2019-07-25 14:37:29

标签: java scala serialization

通常,用可序列化功能包装不能序列化的类型有助于解决可序列化问题。我有一个可序列化的函数,该函数在apply中不能构造可序列化的类型,如果在Scala中涉及到匿名类,则该函数似乎不起作用。这可能是什么原因?请注意,下面的示例只是为了展示构造,而不是导致问题的确切代码。

给出:

trait NotSerializable

trait SerializableFunction[T] extends java.io.Serializable {
  def apply(): T
}

trait Container[T] extends java.io.Serializable {
  def f: SerializableFunction[T]
}

以下原因SerializationException

val f = new SerializableFunction[NotSerializable] {
   def apply(): NotSerializable = new NotSerializable(){}
}

SerializationUtils.roundtrip(new Container(f){})

但是,以下不是会导致SerializationException

case class Wrapper() extends SerializableFunction[NotSerializable] {
  def apply(): NotSerializable = new NotSerializable(){}
}

SerializationUtils.roundtrip(new Container(Wrapper()){})

0 个答案:

没有答案