java - 使用 Java 中的 become()

标签 java akka

我正在使用来自 Java 的 Akka。根据文档, context.become() 需要 Procedure<Object>作为参数。事实上,它期望 PartialFunction<Object, BoxedUnit> 这似乎是使用许多名称奇怪的方法自动生成的东西。

在 Java 中使用 become() 的正确方法是什么?

附言 我正在使用 Akka 2.0.3

更新: 看起来有两种方法:context() 和 getContext()。第一个返回 ActorContext,第二个返回 UntypedActorContext。 UntypedActorContext 有 become(Procedure<Object>) .

最佳答案

您混淆了 Akka Java 和 Scala API。从技术上讲,您可以从 Java 代码中使用像 Akka 这样的 Scala 库,但它通常很冗长和麻烦。因此,Akka 团队决定开发独立的 API - Scala 和 Java 适配器中的原生 API。

在 Scala API 中,您扩展了 akka.actor.Actor它有一个类型为 akka.actor.ActorContextcontext 字段.此 ActorContext.become() 接受 PartialFunction ,这是一个特定于 Scala 的类。

另一方面,在 Java API 中,您扩展了 akka.actor.UntypedActor具有(类 Java)方法 getContext(),返回 akka.actor.UntypedActorContext .这个接受 akka.japi.Procedure .

长话短说 - 如果您使用的是 Java API,请坚持使用。 Scala 和 Java 文档之间有明显的区别。

关于java - 使用 Java 中的 become(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686428/

相关文章:

java - 执行 sqlite 查询,没有任何反应

java - Spring mvc 映射问题

java - Actor 重试,具有退避和重试限制

scala - 我如何模拟 future 的 onComplete 方法?

java - 关于 Akka 和类型安全的一般问题

scala - 测试依赖于 future 的 AKKA Actor

java - 具有许多 ActionListeners 的 MVC 模式

java - 进度条未在 fragment 中显示

java - 卡夫卡流-TimeoutException : Expiring * record(s) for TOPIC:* ms has passed since batch creation

scala - Future[Option[Future[Option[Boolean]]] 简化 future 和期权?