我该如何编写一个函数,在其中用通用类型执行一个 case 语句?

15 浏览
0 Comments

我该如何编写一个函数,在其中用通用类型执行一个 case 语句?

这个问题已经有了答案

如何在Scala中模式匹配泛型类型?

如何在Scala中避免类型擦除?或者,为什么我不能获取我的集合的类型参数?

我想写一个像这样的函数:

def genericCase[T]() : PartialFunction[Any, T] = { 
   case Wrapper(_, item: T) => item
   case Wrapper(item: T, _) => item
}

简而言之,我想要一种方法来重复使用不同类型的模式匹配结构。

编译器告诉我由于类型擦除,case x:T永远不会匹配。

有什么替代方法来执行这种通用案例声明吗?我也尝试使用反射API中的类型作为函数的参数,但我们无法解决该问题。

admin 更改状态以发布 2023年5月25日
0
0 Comments

你只需要添加一个隐式的ClassTag,它允许在一个通用类上进行匹配:

import scala.reflect.ClassTag
def genericCase[T: ClassTag]() : PartialFunction[Any, T] = {
 case Wrapper(_, item: T) => item
 case Wrapper(item: T, _) => item
}

0