所以我一直在玩遙控演員,我遇到了一些序列化異常的困難。我的一條消息是case類的一個實例,它本身包含一個Path類列表的實例。 Path類的定義如下,並且基本上是點的實例與預先計算的距離屬性的集合:斯卡拉遠程演員消息類型的災難
class Point (xi:Int,yi:Int) {
val x: Int = xi
val y: Int = yi
// Determine distance to another point
def distanceTo(p:Point):Int={
val dx = (x - p.x).toDouble
val dy = (y - p.y).toDouble
sqrt(dx*dx + dy*dy).round.toInt
}
override def equals(arg0:Any) : Boolean = {
if (arg0.isInstanceOf[Point] && arg0.asInstanceOf[Point].x == x && arg0.asInstanceOf[Point].y == y) return true
false
}
}
class Path(p: List[Point]) {
val path: List[Point] = p
val length: Int = Point.pathLength(p)
}
雖然這些類的實例可以使用普通的演員那樣來傳遞,沒有issuse,任何試圖發送消息包含List [Path]集合將失敗,並顯示java.io.NotSerializableException。
那麼我該怎麼做?我是否需要爲這些類定義序列化方法?除了通過電線發送類實例之外,還有更好的做法嗎?
任何幫助將不勝感激 - 似乎有真正的信息缺乏和斯卡拉遠程演員的東西的例子。
grr - 我忘了 - 我做了*添加@serialization這兩個類。所以我實際上可以這樣: val z = new Path(List [Point](y)) output.writeObject(z) 其中output是ObjectOutputStrem實例。但是,當這被作爲一個信息發送 - 沒有骰子。相同的序列化錯誤。 – hayzeus 2010-08-30 01:22:55