这里是Akka Java。
如果我有以下actor:
// Groovy pseudo-code.
class Fizz extends UntypedActor {
Buzz buzz
String serviceURL
Fizz(Buzz buzz, String serviceURL) {
super()
this.buzz = buzz
this.serviceURL = serviceURL
}
static Props props() {
Props.create(new Creator<ActorRef>() {
@Override
ActorRef create() throws Exception {
new Fizz() // <— but I’d like to create a Fizz with a
// particular buzz/serviceURL
}
}
}
@Override
void onReceive(Object msg) {
// etc.
}
}
我想创建该演员的实例(ActorRef
),然后从我发现的文档/代码示例中,似乎我可以这样做:
actorSystem.actorOf(Props.create(Fizz), “fizz")
我是否可以假设Props.create(Fizz)
调用静态Fizz.props()
方法,从而返回新的Fizz
实例?
如果是,那么我想知道如何将参数传递给构造函数。根据Java API文档,有一个Props.create(Class<T> clazz, Object…args)
过载,但我不知道如何将args
传递给不带参数的Fizz.props()
。
无论哪种方式,我都在寻找一个具体的Java示例,显示如何修改actorSystem.actorOf(Props.create(Fizz.class), “fizz”)
调用以传递buzz
和serviceURL
参数。我需要这个,因为我最终会有许多Fizz
实例,每个实例都有不同的buzz
和serviceURL
参数/配置。
不,它不会调用你的props方法。
(使用Akka 2.3.8):在示例中使用重载(为简洁起见,使用Java 8):
public static Props props(Buzz buzz, String url) {
Props.create(Fizz.class, () -> buzz, url);
}
您必须在创建时显式调用它以获得正确的Props
:
ActorRef fizzActor = system.actorOf(
Fizz.props(buzzObject, "somestring"), "actor_name");