Ответ 1
Если вы читаете документы Akka (вкус Java), в нем перечислены два способа создания актера с параметрами конструктора. Первый так выглядит (используя ваши классы):
ActorSystem system = ActorSystem.create("PiSystem");
final ActorRef listener = system.actorOf(Props.create(Listener.class), "listener");
ActorRef master = system.actorOf(Props.create(Master.class, nrOfWorkers, nrOfMessages, nrOfElements, listener), "master");
master.tell(new Calculate(), ActorRef.noSender());
Или, если вы не хотите идти по этому маршруту, вы можете использовать Creator
так:
public class MasterCreator implements Creator<Master>{
private int nrOfWorkers, nrOfMessages, nrOfElements;
private ActorRef listener;
public MasterCreator(int nrOfWorkers, int nrOfMessages, int nrOfElements, ActorRef listener){
this.listener = listener;
this.nrOfElements = nrOfElements;
this.nrOfMessages = nrOfMessages;
this.nrOfWorkers = nrOfWorkers;
}
public Master create(){
return new Master(nrOfWorkers, nrOfMessages, nrOfElements, listener);
}
}
И затем используйте его следующим образом:
ActorSystem system = ActorSystem.create("PiSystem");
final ActorRef listener = system.actorOf(Props.create(Listener.class), "listener");
ActorRef master = system.actorOf(Props.create(new MasterCreator(nrOfWorkers, nrOfMessages, nrOfElements, listener)), "master");
master.tell(new Calculate(), ActorRef.noSender());