使用默认参数值创建actor

时间:2016-06-15 14:22:39

标签: scala akka

给出以下演员类:

class MyActor(val arg: Int = 5) extends Actor {
  ...
}

如何在不使用dangerous variant on Prop system.actorOf(Props(new MyActor()))的情况下创建使用默认值的MyActor实例?

第一个变体system.actorOf(Props[MyActor])和第二个变体system.actorOf(Props(classOf[MyActor]))都抛出:

  

IllegalArgumentException:在MyActor上找不到匹配的构造函数用于参数[]

由于类MyActor应该有一个空的构造函数,这是意料之外的。

1 个答案:

答案 0 :(得分:3)

请注意Props(new MyActor)变体只有在您在另一个演员中调用它时才会发生危险(由于关闭了封闭的演员this)。要克服危险,请在props的伴随对象中定义MyActor工厂,并为其指定默认参数值,而不是在actor的构造函数中:

object MyActor {
  def props(arg: Int = 5): Props = Props(new MyActor(arg))
}
class MyActor(arg: Int) extends Actor {
  ...
}

然后

system.actorOf(MyActor.props())
相关问题