有没有办法指定一个actor可以接受什么类型的消息,如果有人试图将其发送给其他类型,是否会产生编译错误?
答案 0 :(得分:2)
不确定它是否回答了你的问题,但我希望它会给你一些想法。也许您正在从Typed Actors项目中搜索Akka之类的内容:
Typed Actors是通过Typed Actors实现的。它使用AOP通过AspectWerkz将常规POJO转换为具有Actor模型语义的异步非阻塞Actors。例如。每个消息调度都被转换为一个消息,该消息被放置在队列中,由Typed Actor逐个处理。
因此,您定义接口和实现,然后将它们注册为actor。 Akka将为你的界面创建代理,仍然使用幕后的演员模型。您仍然可以使用以下消息传递样式:
答案 1 :(得分:0)
我认为答案是在@mkneissl提到的the post中: “通常的做法是声明Actor可以在Actor的伴侣对象中接收哪些消息,这样可以更容易地知道它可以接收到什么。”
这方面的一个例子很有用......
答案 2 :(得分:0)
虽然键入的actor确实在某种程度上解决了这个问题,但你必须记住,这只提供了部分静态类型的安全性 - 你仍然默默地从一个无类型的actor到一个类型化的动态转换{{1调用,这就是动态性进入并且静态正确性丢失的地方 - 如果底层引用结果指向一个实际上不遵守类型化接口的actor,那么你就有了一个bug; Akka没有尝试运行时验证谁“支持”键入的引用,因此键入的消息最终被发送给无法(正确)响应它们的actor。
总而言之,据我所知,使用Akka实现完整(?)静态类型安全的唯一方法是使用Typed Channels:http://letitcrash.com/post/45188487245/the-second-step-akka-typed-channels。