繁体   English   中英

通用模式匹配和类型擦除

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM