如何编写一个使用泛型类型执行case语句的函数?

Ses*_*ian 5 scala

我想写一个这样的函数:

def genericCase[T]() : PartialFunction[Any, T] = { 
   case Wrapper(_, item: T) => item
   case Wrapper(item: T, _) => item
}
Run Code Online (Sandbox Code Playgroud)

总之,我想要一种方法来重用不同类型的模式匹配结构.
编译器告诉我,由于类型擦除,case x: T将永远不会匹配.做这种通用案例陈述的替代方法是什么?我还尝试在反射API中使用Types作为函数的参数,但我们无法弄清楚.

Pet*_*lák 5

您只需添加一个ClassTag允许匹配泛型类的隐式:

import scala.reflect.ClassTag

def genericCase[T: ClassTag]() : PartialFunction[Any, T] = {
 case Wrapper(_, item: T) => item
 case Wrapper(item: T, _) => item
}
Run Code Online (Sandbox Code Playgroud)