给出以下演员类:
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应该有一个空的构造函数,这是意料之外的。
答案 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())