我有一个扩展actor
的类fooclass foo extends Actor{
def receive:PartialFunction[Any, Unit] = ???
protected def fooFunctionIWant = { print("hello")}
}
我还有另一个课程" bar"我想扩展foo所以它将继承fooFunctionIWant
但是当我尝试时:
object bar extends foo {
def barFunc = {
fooFunctionIWant
}
}
然后:
bar.barFunc
我明白了:
Caused by: akka.actor.ActorInitializationException: You cannot create an instance of [...] explicitly using the constructor (new). You have to use one of the 'actorOf' factory methods to create a new actor. See the documentation.
at akka.actor.ActorInitializationException$.apply(Actor.scala:173) ~[akka-actor_2.11-2.4.1.jar:na]
at akka.actor.Actor$class.$init$(Actor.scala:436) ~[akka-actor_2.11-2.4.1.jar:na]
答案 0 :(得分:1)
创建actor实例的唯一正确方法是使用actorOf
方法之一。使用new Actor
或object Actor
将在运行时失败。
你不能直接调用actor中的任何方法,你只能向它发送消息并从中接收消息。否则,如果可能的话,它会破坏Actor封装。
如果要在actor和常规类之间共享代码,可以将该共享代码放在特征中并从中继承。但是,您的actor只能在内部使用该代码,并且不会公开任何方法,从actorOf
返回的实例类型仍然只是Actor
。