【发布时间】:2010-08-29 23:42:38
【问题描述】:
所以我一直在玩远程演员,并且在序列化异常方面遇到了一些困难。我的一条消息是一个案例类的实例,它本身包含一个路径类列表的实例。 Path 类定义如下,本质上是一个具有预先计算的距离属性的 Point 实例的集合:
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)
}
虽然这些类实例可以使用普通 Actor 毫无问题地传递,但任何发送包含 List[Path] 集合的消息的尝试都会失败,并出现 java.io.NotSerializableException。
那我该怎么办?我需要为这些类定义序列化方法吗?除了通过网络发送类实例之外,是否有更好的做法来实现此目的?
任何帮助都将不胜感激 - Scala 远程参与者的信息和示例似乎确实缺乏。
【问题讨论】: