Akka Java API - 如何使用stash和stash扩展AbstractActor?

时间:2017-09-29 15:51:30

标签: java akka

在Scala中,我看到你可以这样写:

class MyActor extends Actor with ActorLogging with Stash

在Java API中,我看到了以下要扩展的类

AbstractActor
AbstractLoggingActor
AbstractActorWithStash

有没有办法在上面创建Scala等效的Java?谢谢!

1 个答案:

答案 0 :(得分:2)

class MyActor extends Actor with ActorLogging with Stash

ActorActorLoggingStash这里是特征。在Scala中,类可以扩展特征并混合其他特征。

AbstractActor
AbstractLoggingActor
AbstractActorWithStash

Akka的Java API中的上述类是抽象类。在Java中,类不能扩展多个抽象类。因此,无法在Java中定义MyActor类的句法等价物。

但是,可以在Java中轻松定义MyActor的有效等价物。 AbstractLoggingActor是在演员中获得LoggingAdapter的便捷方式;使用AbstractLoggingActor的替代方法只是手动创建LoggingAdapter。下面定义了一个使用Java API进行日志记录和存储的actor:

import akka.actor.*;
import akka.event.Logging;
import akka.event.LoggingAdapter;

class MyActorInJava extends AbstractActorWithStash {
  LoggingAdapter log = Logging.getLogger(getContext().getSystem(), this);
  ...
}