I have a an actor defined as so:
class nodeActor(ID: String) extends Actor
which contains a method, which is used to set up the actor before it
You can cast anything to anything and the compiler will happily do so, but the check at runtime will fail if it's not possible. The ActorRef
is not an instance of your Actor
class or a subtype of it.
When you do this:
system.actorOf(Props(new nodeActor("node1")), name="node1")
You get back an ActorRef
to which you should only send messages. Apart from that, the actor is started immediately when you call system.actorOf
, so trying to call a method on the Actor
instance before it is started is not possible.
Here is a description of actors from the Akka Docs explaining actor references.
If you want to do this for testing then when creating actor you can just do this:
import akka.testkit.TestActorRef
val actorRef = TestActorRef[MyActor]
val actor = actorRef.underlyingActor
Then you can run methods on actor
You're not supposed to call an actor's methods directly from another class. It breaks the whole design of the system, which is
ActorRef
obtained with the call to actorOf
or actorFor
!
, ?
) methodsIf you need to create a reference in ActorA
to another ActorB
you can:
ActorB
in the ActorA
's initialization code as shown in http://doc.akka.io/docs/akka/2.0.3/scala/actors.htmlActorB
's reference to the ActorA
as a specific message. Then ActorA
can store the reference within receive
implementationIf you need to call a method to satisfy an Interface/Trait constraint, have a look at Typed Actors