通常,用可序列化功能包装不能序列化的类型有助于解决可序列化问题。我有一个可序列化的函数,该函数在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()){})