我有一个 Actor 定义如下:
class nodeActor(ID: String) extends Actor
其中包含一个方法,该方法用于在启动actor之前对其进行设置:
def addRef(actor:ActorRef)
我实例化这个 Actor 是这样的:
val node1 = system.actorOf(Props(new nodeActor("node1")), name="node1")
这给我返回了一个ActorRef。编译器不允许我在ActorRef上调用“addRef”,因为它是子类型的成员。因此,我使用以下方法转换节点:
node1.asInstanceOf[nodeActor].addRef(link1)
这使编译器保持满意状态。然后在运行时我得到
java.lang.ClassCastException: akka.actor.LocalActorRef cannot be cast to ActorStressTest.nodeActor
这对我来说似乎根本没有意义,因为它是一个子类型,我应该可以强制使用它。
有想法吗?
最佳答案
您不应该直接从另一个类调用actor的方法。它破坏了系统的整体设计,即
ActorRef
或actorOf
actorFor
通信来封装 Actor 的特定实现!
,?
)方法如果您需要在
ActorA
中创建对另一个ActorB
的引用,则可以:ActorB
的初始化代码中创建对ActorA
的引用,如http://doc.akka.io/docs/akka/2.0.3/scala/actors.html ActorB
的引用作为特定消息发送到ActorA
。然后ActorA
可以将引用存储在receive
实现如果您需要调用一种方法来满足Interface/Trait约束,请查看Typed Actors
关于scala - Scala中Akka Actor 的调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13291346/