我想写一个这样的函数:
def genericCase[T]() : PartialFunction[Any, T] = {
case Wrapper(_, item: T) => item
case Wrapper(item: T, _) => item
}
总之,我想要一种方法来重用不同类型的模式匹配结构
编译器告诉我,由于类型擦除,case x: T
永远不会匹配。做这种通用案例陈述的替代方法是什么?我还尝试在反射API中使用Types作为函数的参数,但我们无法弄清楚。
答案 0 :(得分:5)
您只需要添加一个隐式ClassTag
,它允许匹配泛型类:
import scala.reflect.ClassTag
def genericCase[T: ClassTag]() : PartialFunction[Any, T] = {
case Wrapper(_, item: T) => item
case Wrapper(item: T, _) => item
}