java - Akka 演员和 aroundReceive() 方法
问题描述
我正在尝试学习 Akka(使用 Java)并理解一些代码。我在 Actor 类中看到过类似的方法签名:
@Override
public void aroundReceive(PartialFunction<Object, BoxedUnit> receive, Object msg)
我以前从未听说过这种方法,也不理解它。该方法的目的是什么?这个PartialFunction<Object, BoxedUnit>
接收参数来自哪里?我认为由程序员来实现接收对象。
解决方案
至于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>
是告诉我们和编译器尽可能少的信息的类型)。
推荐阅读
- html - 在 Angular Material 中输入第一次不工作
- mysql - 每当 id 更改时,如何将用户定义的变量值设置为零?
- javafx - 填充组合框 FXML
- php - 所有页面都显示 404 Not Found Nginx 但主页工作正常
- swift - 在 Swift 中导入钠的问题
- c - 在 Linux 内核中使用 workqueue 或 kthread 执行 ELF
- php - 我有一个登录 php 文件给我这个错误“mysqli_stmt_close() 期望参数 1 是 mysqli_stmt,布尔值”
- python - 无法解释python中打印语句的输出
- linux - 如何创建能够让我查看、修改和附加它创建的文本文件的 Shell 脚本
- html - 为什么 _POST 不从 HTML 表单中收集数据?