目标是编写创建者函数,定义演员可以接收哪种消息,并在actor中匹配这种消息。 所以我想指定我的预期消息是X类型(我只知道这种类型,当我调用create function时)
我的代码非常简单:
import akka.actor.Actor.Receive
def create[X]():Receive = {
case msg:X =>
}
此代码给出了以下错误:"抽象类型模式X未选中,因为它已被删除"
我知道什么是类型擦除,但我无法找到解决此问题的任何方法。
答案 0 :(得分:1)
ClassTag几乎可以解决这个问题:
def create[X](implicit tag: ClassTag[X]): Receive = {
case msg if msg.getClass == tag.runtimeClass =>
}
请注意,如果您的消息类型本身受类型擦除影响,则会失败。例如,create[List[String]]
仍会接受List[Int]
。我认为没有办法解决这个问题,因为该信息在运行时已完全消失。