Java Akka actors和aroundReceive()方法

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参数来自哪里?我认为

我试图学习Akka(使用Java)并理解一些代码。我在Actor类中看到过类似这样的方法签名:

@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,请阅读