如何从Actor类继承受保护的函数?

时间:2016-03-01 09:03:36

标签: scala akka

我有一个扩展actor

的类foo
class 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]

1 个答案:

答案 0 :(得分:1)

创建actor实例的唯一正确方法是使用actorOf方法之一。使用new Actorobject Actor将在运行时失败。

你不能直接调用actor中的任何方法,你只能向它发送消息并从中接收消息。否则,如果可能的话,它会破坏Actor封装。

如果要在actor和常规类之间共享代码,可以将该共享代码放在特征中并从中继承。但是,您的actor只能在内部使用该代码,并且不会公开任何方法,从actorOf返回的实例类型仍然只是Actor