Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以将ActorContext(getContext())传递到Actor外部以创建子Actor?_Java_Akka_Akka Actor - Fatal编程技术网

Java 是否可以将ActorContext(getContext())传递到Actor外部以创建子Actor?

Java 是否可以将ActorContext(getContext())传递到Actor外部以创建子Actor?,java,akka,akka-actor,Java,Akka,Akka Actor,我想要一个ActorFactory类,如下所示 公共类SampleFactory{ //简单创建方法 公共createActor(AbstractActor.ActorContext ActorContext,Props Props){ 返回actorContext.actorOf(props); } //其他复杂的创建方法 ... } 使用上面的工厂类创建一个子参与者可以吗,或者这被认为是一种不好的做法?如果被认为是不好的做法,那么为什么呢 例如: 公共类SampleActor扩展了Abst

我想要一个ActorFactory类,如下所示

公共类SampleFactory{
//简单创建方法
公共createActor(AbstractActor.ActorContext ActorContext,Props Props){
返回actorContext.actorOf(props);
}
//其他复杂的创建方法
...
}
使用上面的工厂类创建一个子参与者可以吗,或者这被认为是一种不好的做法?如果被认为是不好的做法,那么为什么呢

例如:

公共类SampleActor扩展了AbstractActor{
私人最终样品工厂样品工厂;
@凌驾
公共接收createReceive(){
return receiveBuilder()
.match(SampleData.class,SampleData->{
Props-sampleProps=getSampleProps(…);
ActorRef childActor=sampleActorFactory.createActor(getContext(),sampleProps);
})
.build();
}
}

我认为这种方法没有任何错误,您应该能够访问actor系统之外的上下文。但是一般来说,要创建一个参与者,您只需要一行代码,如下所示。对于代码,您必须在创建actor的地方编写两行代码(一行用于Props,另一行用于调用createActor()方法)。除了实现工厂方法之外,如果您从中获得了任何额外的好处,您可以尝试

ActorRef demoActor = getContext().system().actorOf(Props.create(MyDemoActor.class, prop1, prop2);

为什么是actorContext.actorOf(props);不准确的根据这里的文档()getContext().actorOf(props)的使用是一致的。actorContext.actorOf(道具);创建上下文和actorContext.system().actorOf(props)的子级;创建一个监护人的孩子。是的,你是对的。应用程序中的第一个参与者必须通过system.actorOf()创建,后续参与者(如果是子参与者)将从actorContext.actorOf()创建