“解决方案”;“非类型转换器”;Akka(Java)教程中已弃用 原始代码

“解决方案”;“非类型转换器”;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

Akka教程具有以下代码:

其中,
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());