繁体   English   中英

Akka:使用非默认构造函数在Scala中定义一个actor并从Java代码创建它

[英]Akka: defining an actor in Scala with non-default constructor and creating it from Java code

Akka Scala演员必须扩展akka.actor.Actor

Akka Java actor必须扩展akka.actor.UntypedActor

因此,在使用非默认构造函数定义Scala actor并从Java代码创建它时,我遇到了以下问题:

ActorRef myActor = system.actorOf(new Props(new UntypedActorFactory() {
  public UntypedActor create() {
    return new MyActor("...");
  }
}), "myactor");

当然,UntypedActorFactory期望创建UntypedActor类型的对象,但是我的actor是Actor类型。

解决方法是什么?

编辑:

按照Viktor的说明使用akka.japi.Creator,此方法有效:

Props props1 = new Props();
Props props2 = props1.withCreator(new akka.japi.Creator() {
        public Actor create() {
            return new MyActor("...");
        }
    });
ActorRef actorRef = Main.appClient().actorOf(props2, "myactor");

在这种情况下,传递akka.japi.Creator而不是UntypedActorFactory。

另外,至少在2.0.1及更高版本中,它不需要UntypedActor:

trait UntypedActorFactory extends Creator[Actor] with Serializable

https://github.com/akka/akka/blob/v2.0.1/akka-actor/src/main/scala/akka/actor/UntypedActor.scala#L161

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM