原始代码
Akka教程包含以下代码:http://doc.akka.io/docs/akka/2.0.2/intro/getting-started-first-java.html
public void calculate (final int nrOfWorkers, final int nrOfElements, final int nrOfMessages){
ActorSystem system = ActorSystem.create("PiSystem");
final ActorRef listener = system.actorOf(Props.create(Listener.class), "listener");
ActorRef master = system.actorOf(new Props(new UntypedActorFactory() {
public UntypedActor create() {
return new Master(nrOfWorkers, nrOfMessages, nrOfElements, listener);
}
}), "master");
master.tell(new Calculate(), ActorRef.noSender());
}
其中,UntypedActorFactory
已被弃用。
我的修改
因此,我尝试使用Props.create
,例如:
ActorRef master = system.actorOf( Props.create(
new Creator<Master>(){
public Master create(){
return new Master(nrOfWorkers, nrOfMessages, nrOfElements, listener);
}
}), "master");
出现异常,提示无法使用非静态的本地创建器来创建演员; 让它成为静态或顶级。
因此我开始编写一个静态类,其中包含需要传递的参数。
static class LocalCreator implements Creator<Master>{
public Master create(){
return new Master(nrOfWorkers, nrOfMessages, nrOfElements, listener);
}
}
问题
如何优雅地将nrOfWorkers等参数传递到create()
函数中?