[英]Generic pattern matching and type erasure
目的是编写创建者函数,定义actor可以接收哪种消息,并在actor中匹配这种消息。 所以我想指定我期望的消息是X类型(我只有在调用create函数时才知道这种类型)
我有非常简单的代码:
import akka.actor.Actor.Receive
def create[X]():Receive = {
case msg:X =>
}
此代码给我以下错误:“抽象类型模式X未选中,因为通过擦除将其消除了”
我知道什么是类型擦除,但是我找不到此问题的任何解决方案。
一个ClassTag几乎可以解决这个问题:
def create[X](implicit tag: ClassTag[X]): Receive = {
case msg if msg.getClass == tag.runtimeClass =>
}
但是请注意,如果您的消息类型本身受类型擦除的影响,则此操作将失败。 例如, create[List[String]]
仍将接受List[Int]
。 我认为没有办法解决此问题,因为该信息在运行时已完全消失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.