“解决方案”;“非类型转换器”;Akka(Java)教程中已弃用 原始代码
Akka教程具有以下代码: 其中,“解决方案”;“非类型转换器”;Akka(Java)教程中已弃用 原始代码,java,static,akka,Java,Static,Akka,Akka教程具有以下代码: 其中,UntypedActorFactory不推荐使用 我的国防部 所以我尝试使用道具 ActorRef master = system.actorOf( Props.create( new Creator<Master>(){ public Master create(){ return new Master(nrOfWorkers, nrOfMessages
UntypedActorFactory
不推荐使用
我的国防部
所以我尝试使用道具
ActorRef master = system.actorOf( Props.create(
new Creator<Master>(){
public Master create(){
return new Master(nrOfWorkers, nrOfMessages, nrOfElements, listener);
}
}), "master");
ActorRef master=system.actorOf(Props.create(
新创建者(){
公共主创建(){
返回新主机(nrOfWorkers、nrOfMessages、nrOfElements、listener);
}
})“船长”);
还有例外的说法
无法使用非静态本地创建者创建参与者;让它静止
还是高层
所以我开始编写一个静态类,它有需要传递的参数
static class LocalCreator implements Creator<Master>{
public Master create(){
return new Master(nrOfWorkers, nrOfMessages, nrOfElements, listener);
}
}
静态类LocalCreator实现Creator{
公共主创建(){
返回新主机(nrOfWorkers、nrOfMessages、nrOfElements、listener);
}
}
问题:
如何优雅地将参数nrOfWorkers等传递到create()
函数中?如果您阅读Akka文档(Java风格),它列出了两种可以构造具有构造函数参数的参与者的方法。第一个是这样的(使用示例类):
或者,如果您不想走这条路,您可以使用创建者
,如下所示:
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);
}
}
你需要仔细阅读。顺便说一句,这个问题已经有无数个版本被问过了。@Adnrew,那么你就失去了在create中使用的参数。你熟悉阿克卡吗?不推荐使用的UntypedActor允许非静态类的实例。但新的却不是。也许存在着对阶级的厌恶,允许非静态阶级。这就是Akka问题的所在。我已经用java的2.3.11版本创建了一个更新的教程。试试看:。谢谢,您的第一个解决方案肯定有效。但是你的第二个看起来和我的完全一样。它给了我一个异常java.lang.IllegalArgumentException:不能使用非静态本地创建者来创建参与者;使其静止或顶部-level@Splash抢手货我更新了我的解决方案,不包括匿名类方法,因为这似乎是不允许的。
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());
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());