scala - Akka - 使用反射创建 Actor

标签 scala reflection constructor akka actor

我需要创建一个 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/

相关文章:

c++ - 在 C++ 中使用字符串数组多次运行一个函数

scala - 如何在 Scala 的 map 上跳过 map 函数中的键

scala - 如何将一个 lambda 表达式对象分配给另一个对象?

java - 静态 block 内的构造函数

c# - 获取未知类型列表的计数

java - 在 Java 中从给定的 Class 对象创建对象

c++ - 绕过C++中的构造函数

scala map 通过键获取值,键不区分大小写

scala - 电梯项目主持人

c# - 如何创建其构造函数需要委托(delegate)函数参数的泛型类型的实例?