对不起,akka typed 我是不准备进行源码分析的,首先这个库的API还没有release,所以会may change,也就意味着其概念和设计包括API都会修改,基本就没有再深入分析源码的意义了。另外这个typed actor跟OOP的class差别还是很大的,目前的API还是很丑的,至少我看着非常别扭啊。如果各位读者对这个有兴趣,去谷歌一下,看看它一些简单的介绍就好了,千万不要在生产使用。
不过我们也可以分析一下akka typed出现的原因。在我们会用actor开发的时候一定会遇到这样的问题,那就是我们可以给actor发送任意类型的消息。这通常意味着actor的邮箱可能会收到垃圾消息,跟现实中我们的邮箱会收到垃圾广告信件是一样的。为啥会出现这种情况呢?因为actor为了通用,它的receive第一个参数是any类型的,所以不会对收到的消息类型做校验。akka typed某种意义上是可以用来解决这个问题的,当然还有其他原因。
但话有说回来,通过使用receive的isDefineAt不就可以判断了么?当然这也做的坏处就是actor的类信息就暴露出去了,而且客户端都是通过ActorRef来发消息的,而ActorRef的概念中并没有isDefineAt的融入点,所以就比较尴尬。这个问题确实比较难解决哈。