我需要创建一个 actor,其确切类型仅在运行时从配置文件中读取。该 actor 的构造函数非常重要,即它需要一些在配置文件中定义的参数。
到现在为止,我一直尝试使用反射来做到这一点,如下所示:
val actor = actorOf(constructor.newInstance(parameters: _*).asInstanceOf[T]).start
不幸的是,这会导致“akka.actor.ActorInitializationException:ActorRef for instance of actor [...] 不在范围内。您不能使用‘new MyActor’显式创建 actor 的实例。[.. .]”!
现在,我知道这可以防止框架泄漏对内部对象的引用,但是我怎样才能解决这个问题呢?或者,我还能如何以可行的方式做我想做的事情?
最佳答案
也许使用 Java 接口(interface)来创建带参数的 actor。用于创建的 (Java) 代码如下所示:
ActorRef actor = actorOf(new UntypedActorFactory() {
public UntypedActor create() {
return new MyUntypedActor("service:name", 5);
}
});
所以你传递了一个工厂而不是一个函数。这可能会更好......
关于scala - Akka - 使用反射创建 Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7941971/