什么是Akka库中的AbstractorActor和UntypedActor类之间的区别.这两个类都用于创建actor.但是它们之间的区别是什么?!
它们是用于在Java中创建Actors的单独API UntypedActor,已被弃用,并且已被AbstractActorJava 8的开头取代,这要归功于哪个lambda表达式接收函数比旧方法更好实现.
旧的(已弃用,自2.5.0开始)方式:
// this is DEPRECATED -----------vvvvvvvvvvvv
class My_OLD_STYLE_Actor extends UntypedActor {
@Override
public void onReceive(Object msg) {
if (msg instanceof RequestMonies) {
RequestMonies req = (RequestMonies) msg;
// ...
} else if (msg instanceof CheckStatus) {
CheckStatus check = (CheckStatus) msg;
// ...
} else unhandled();
}
}
Run Code Online (Sandbox Code Playgroud)
AbstractActor这是使用适当的当前API的相同代码段:
这是当前的API(从2.5.0开始):
public class JavaStyleActor extends AbstractActor {
@Override
public Receive createReceive() {
return receiveBuilder()
.match(RequestMonies.class, req -> {
// handle request monies...
})
.match(CheckStatus.class, check -> {
// ...
})
.build();
}
}
Run Code Online (Sandbox Code Playgroud)
您会注意到铸造的需要已经消失,而且还需要确保手动调用未处理.总体而言,新API更容易做正确的事情.随着Akka Typed在2018年初投入生产,它将在2018年变得更加美好 - 请密切注意这一点.
总的来说,UntypedActor如果你正在使用Akka和Java构建新东西,那么简单地忽略它的存在.对于那些过去使用它的人来说,它仍然存在,以便他们可以在2.5的生命周期内顺利地转换为AbstractActor.