Java Akka actors和aroundReceive()方法
我试图学习Akka(使用Java)并理解一些代码。我在Actor类中看到过类似这样的方法签名:Java Akka actors和aroundReceive()方法,java,scala,akka,actor,Java,Scala,Akka,Actor,我试图学习Akka(使用Java)并理解一些代码。我在Actor类中看到过类似这样的方法签名: @Override public void aroundReceive(PartialFunction<Object, BoxedUnit> receive, Object msg) @覆盖 接收周围的公共无效(PartialFunction接收,对象消息) 我以前从未听说过这种方法,也不了解它。这种方法的目的是什么?这个PartialFunctionreceive参数来自哪里?我认为
@Override
public void aroundReceive(PartialFunction<Object, BoxedUnit> receive, Object msg)
@覆盖
接收周围的公共无效(PartialFunction接收,对象消息)
我以前从未听说过这种方法,也不了解它。这种方法的目的是什么?这个
PartialFunction
receive参数来自哪里?我认为应该由程序员来实现receive对象。首先,我在Scala中使用Akka,而不是Java。我希望这个答案能给你一个线索。
在Scala中,此方法是@InternalApi
。Scala中的文档是:
标记被认为是Akka内部的API,并且可以在任何时间点更改,而无需任何更改
警告
例如,当Scala{@code private[akka]}访问
使用限制,因为Java无法表示此包的受限访问等
方法和类在字节码中表示为{@code public}
此方法的一个目的是使用自定义行为包装receive方法。您可以在trait中看到一个例子。至于
PartialFunction
,一个(非类型化)actor中的receive
函数就是一个例子(Scala API中对此做了充分的说明,而Java API中的说明则不太清楚)
实现此功能的参与者(通常通过Scala mixin或扩展覆盖它的抽象类)将从程序员实现的参与者处获取receive
函数,并截获对某些消息的调用(例如计时消息)或者对传递到给定接收的消息进行预/后处理
PartialFunction
基本上是指:
- 这是一个函数,它不保证对任何特定的输入都有结果;调用方负责事先检查(
isDefinedAt
)函数是否有结果,或者接受函数将抛出异常。(PartialFunction
:未在其整个域中定义的函数)
Object
(或者用Scala术语Any
(技术上是AnyRef
,但是自动装箱让我们暂时忘记了这一点):函数理论上可以接受任何东西
BoxedUnit
表示函数不返回有用的结果(Unit
在Scala中类似于Java中的void
,但实际上是一个对象(精确地说是一个单例))
(在某种程度上,PartialFunction
是告诉我们和编译器尽可能少的信息的类型)。Anton,请阅读