首页 > 解决方案 > Akka 演员和 aroundReceive() 方法

问题描述

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

@Override
public void aroundReceive(PartialFunction<Object, BoxedUnit> receive, Object msg)

我以前从未听说过这种方法,也不理解它。该方法的目的是什么?这个PartialFunction<Object, BoxedUnit>接收参数来自哪里?我认为由程序员来实现接收对象。

标签: javascalaakkaactor

解决方案


至于PartialFunction<Object, BoxedUnit>receive(无类型的)actor 中的函数就是它的一个实例(这在 Scala API 中非常清楚,而在 Java API 中则不太清楚)。

实现此功能的 Actor(通常通过 Scala mixin 或扩展覆盖它的抽象类)将从receive程序员实现的 Actor 中获取函数并拦截对某些消息(例如计时消息)的调用或进行预处理/后处理传递给给定的消息receive

PartialFunction<Object, BoxedUnit>基本上意味着:

  • 这是一个不承诺对任何特定输入产生结果的函数;调用者有责任事先检查 ( isDefinedAt) 函数是否有结果或接受该函数将引发异常。( PartialFunction: 一个未在其整个域中定义的函数)
  • Object(或在 Scala 术语中Any(技术上AnyRef,但自动装箱让我们暂时忘记这一点)):该函数理论上可以接受任何东西
  • BoxedUnit表示该函数没有返回有用的结果(Unit在 Scala 中就像void在 Java 中一样,但实际上是一个对象(准确地说是一个单例))。

(在某种程度上PartialFunction<Object, BoxedUnit>是告诉我们和编译器尽可能少的信息的类型)。


推荐阅读