我注意到我是否应该在这里提出这个问题。我有一个扩展可序列化的scala类,但是当我尝试使用fileoutputstream保存类时,我不断收到NotSerializableException。
class BKTree(terms: Seq[String], dist: (String, String) => Int = Levenshtein.distance) extends scala.serializable{
}
class BKNode(val name: String,dist: (String, String) => Int = Levenshtein.distance) extends scala.serializable{
}
object Levenshtein extends scala.serializable {
}
BKTree生成的工作完全正常,但在尝试保存树时,它会生成NotSerializableException。
答案 0 :(得分:1)
您应该扩展Serializable
(或java.io.Serializable
)。 serializable
是不推荐使用的注释。
您无法序列化任意函数(例如dist
)。
我可以建议一种解决方法:
// require that distance functions be serializable
trait DistFunction extends (String, String) => Int with Serializable
object Levenshtein {
val distance: DistFunction = ...
}
class BKTree(terms: Seq[String], dist: DistFunction) extends Serializable
...
请注意,您必须确保distance
实施 可序列化。